2014-01-06 3 views
1

YouTube 튜토리얼을 따르고 있지만 자습서 제작자가 SDL 1.2를 사용하고 있고 2.00을 사용하고있어서 SDL 마이그레이션 가이드에 따라 코드를 약간 변경해야하는 문제가 있습니다. 그러나 내 코드는 삼각형을 그려야한다는 것을 가정하지 않습니다. 그처럼 간단합니다. 나가 얻는 모두는 백색 스크린이다.SDL OpenGL 문제

====== 주요 ============

#include "stdafx.h" 


void init() 
{ 
    glClearColor(0.0, 0.0, 0.0, 1.0); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45, 640.0/480.0, 1.0, 500.0); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
} 

void display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
    glBegin(GL_TRIANGLES); 
    glVertex3f(0.0, 2.0, -5.0); 
    glVertex3f(-2.0, -2.0, -5.0); 
    glVertex3f(2.0, -2.0, -5.0); 
    glEnd(); 
} 

int main(int argc, char* argv[]){ 
SDL_Init(SDL_INIT_EVERYTHING); 
    SDL_Window * window; 
    window = SDL_CreateWindow("OpenGLTest", 300, 300, 640, 480, SDL_WINDOW_SHOWN |  SDL_WINDOW_OPENGL); 
    init(); 
    SDL_Event * mainEvent; 
    mainEvent = new SDL_Event; 

    while (true){ 
     SDL_PollEvent(mainEvent); 
     display(); 
     SDL_GL_SwapWindow(window); 

     if (mainEvent->type == SDL_QUIT){ 
      break; 
     } 
    } 

return 0; 
} 

===== stdafx =========

#pragma once 

#include <iostream> 
#include <SDL.h> 
#include <Windows.h> 
#include <gl/GL.h> 
#include <gl/GLU.h> 

#define PI 3.14159265 

using namespace std; 

내가 잘못하고있는 아이디어가 있습니까?

+0

이 glColor3f 또는 glColor4f –

+0

하지만 검은 색 배경에 흰색 삼각형을 그릴 예정되지와 색상을 설정하는 시도를? 배경이 검은 색으로 지워지고 기본 그리기 색이 흰색이기 때문에? – user3161752

+0

나는 시험해 보았다. 그것은 작동하지 않았다 – user3161752

답변

2

SDL_WINDOW_OPENGL 만 필요하지만 충분하지는 않습니다.

SDL_GL_CreateContext()와 GL 컨텍스트를 만들고이를 현재 SDL_GL_MakeCurrent()를 통해합니다

#include <GL/glew.h> 
#include <SDL/SDL.h> 

int main(int argc, char *argv[]) 
{ 
    SDL_Init(SDL_INIT_EVERYTHING); 
    SDL_Window * window = SDL_CreateWindow 
     (
     "OpenGLTest", 
     300, 300, 
     640, 480, 
     SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL 
     ); 
    SDL_GLContext context = SDL_GL_CreateContext(window); 
    SDL_GL_MakeCurrent(window, context); 

    glewInit(); 

    bool running = true; 
    while(running) 
    { 
     SDL_Event ev; 
     while(SDL_PollEvent(&ev)) 
     { 
      if (ev.type == SDL_QUIT) 
       running = false; 
     } 

     glClearColor(0.0, 0.0, 0.0, 1.0); 
     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 

     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     gluPerspective(45, 640.0/480.0, 1.0, 500.0); 

     glMatrixMode(GL_MODELVIEW); 
     glLoadIdentity(); 

     glBegin(GL_TRIANGLES); 
     glVertex3f(0.0, 2.0, -5.0); 
     glVertex3f(-2.0, -2.0, -5.0); 
     glVertex3f(2.0, -2.0, -5.0); 
     glEnd(); 

     SDL_GL_SwapWindow(window); 
    } 

    SDL_GL_DeleteContext(context); 
    SDL_DestroyWindow(window); 
    SDL_Quit(); 

    return 0; 
} 
+0

감사합니다. 나는 컨텍스트에 대해 몰랐다. – user3161752

+1

@ user3161752 : 문제가 해결 된 경우 스택 오버플로에 대해 최대 득점/수락이 적절한 과정입니다. Q & A는 Q를 요청한 사람이 A를 수락 할 때만 작동합니다.) –

+0

미안하지만 나는 아직 그럴만 한 평판이 나지 않습니다.하지만 대답을 골랐습니다. – user3161752