我使用glew 1.1.0,SDL_image 2.0和mingw(Code :: Blocks,Windows)。我试图通过使用SDL_Image导入.png文件,并使其成为一个纹理并显示在我使用OpenGL的屏幕上。当我运行该程序时,它显示一个纯白色的正方形,它具有与试图导入的图像相同的宽度和高度,但它是纯白色的。我查看了大约30分钟的代码,代码看起来很好,它从来没有给我任何错误execpt“错误初始化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);
}
这是我试图加载图像:
程序和错误,因为你可以看到白色的盒子图像应该在哪里。
它仍然给我同样的错误,仍然呈现一个纯白色的正方形。关于这个最奇怪的部分是我在旧笔记本电脑上工作,而现在在这个新的桌面上它不会工作。 – BlindSide78
看看我的编辑。 – Vallentin
@ BlindSide78是否有效? – Vallentin