저는 glew 1.1.0, SDL_image 2.0 및 mingw (Code :: Blocks, Windows)를 사용하고 있습니다. SDL_Image를 사용하여 .png 파일을 가져 와서 텍스처로 만들고 OpenGL을 사용하여 화면에 표시하려고합니다. 프로그램을 실행할 때 순수한 흰색 사각형이 표시됩니다. 가져올 이미지의 너비와 높이가 같지만 순수한 흰색입니다. 나는 약 30 분 동안 코드를 똑바로 훑어 보았고 코드는 괜찮아 보였다. 그리고 나는 오류를 내 보내지 않았다. "OpenGL을 초기화하는 중 오류! 잘못된 값".OpenGL 및 SDL_Image 텍스처 문제
내 MAIN.CPP : 이것은 부하에 노력하고있어 이미지가
#include <GL/glew.h>
#include <SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <iostream>
#include <stdio.h>
#include <SDL_image.h>
#include <SDL_opengl.h>
using namespace std;
void init();
void Render();
bool ex;
bool akey;
SDL_Event e;
SDL_Window *win = NULL;
GLuint txID;
int x, y, w, h;
int main(int argc, char* args[])
{
init();
while(!ex)
{
while(SDL_PollEvent(&e) != 0)
{
if(e.type == SDL_QUIT)
{
ex = true;
}
Render();
}
}
}
void init()
{
SDL_Init(SDL_INIT_VIDEO);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 0);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
win = SDL_CreateWindow("Demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_OPENGL);
SDL_GLContext cont = SDL_GL_CreateContext(win);
SDL_GL_SetSwapInterval(1);
glewInit();
glClear(GL_COLOR_BUFFER_BIT);
glViewport(0.f, 0.f, 640, 480);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 640, 480, 0.0, 1.0, -1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClearColor(0.f, 0.f, 0.f, 1.f);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
SDL_Surface *sur = IMG_Load("ef.png");
w = 40;
h = 60;
glGenTextures(1, &txID);
glBindTexture(GL_TEXTURE_2D, txID);
glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, sur->pixels);
GLenum error = glGetError();
if(error != GL_NO_ERROR)
{
printf("Error initializing OpenGL! %s\n", gluErrorString(error));
}
//Set texture parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
//Unbind texture
glBindTexture(GL_TEXTURE_2D, NULL);
}
void Render()
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(20, 20, 0);
glBindTexture(GL_TEXTURE_2D, txID);
glBegin(GL_QUADS);
glTexCoord2f(0.f, 0.f); glVertex2f(0.f, 0.f);
glTexCoord2f(1.f, 0.f); glVertex2f(w, 0.f);
glTexCoord2f(1.f, 1.f); glVertex2f(w, h);
glTexCoord2f(0.f, 1.f); glVertex2f(0.f, h);
glEnd();
SDL_GL_SwapWindow(win);
}
: 당신이 흰색 상자가 볼 수
프로그램 및 오류, 이미지가 있어야합니다. 당신이 internalFormat
로 4
을 통과하고 있기 때문에
여전히 동일한 오류가 발생하며 여전히 순수한 흰색 사각형을 렌더링합니다. 이것에 관한 가장 이상한 부분은 오래 전에 사용하던 노트북에서 작업해야하는데, 지금은이 새로운 데스크탑에서 작동하지 않을 것입니다. – BlindSide78
제 편집을보세요. – Vallentin
@ BlindSide78 작동 했습니까? – Vallentin