Opengl glTexImage2d不';我什么也不做
这个问题使我困惑。我正在测试一些Haskell到OpenGL的绑定,我创建了一个顶点着色器,一个片段着色器,编译程序,并在转换顶点后在屏幕上绘制一个带纹理的矩形。。。但屏幕是空白的 当我将矩形渲染为白色而不是在片段着色器中使用采样器时,效果很好。当我进入gdebugger并使用选项以存根纹理替换所有纹理时,它也可以正常工作 当我在gdebugger中查看分配的纹理时,没有纹理对象,只有默认的2d纹理。当我在glTexImage2d上设置断点时,我看到它正在被调用,但当我用gdebugger查看它时,内存中没有纹理对象出现Opengl glTexImage2d不';我什么也不做,opengl,haskell,textures,Opengl,Haskell,Textures,这个问题使我困惑。我正在测试一些Haskell到OpenGL的绑定,我创建了一个顶点着色器,一个片段着色器,编译程序,并在转换顶点后在屏幕上绘制一个带纹理的矩形。。。但屏幕是空白的 当我将矩形渲染为白色而不是在片段着色器中使用采样器时,效果很好。当我进入gdebugger并使用选项以存根纹理替换所有纹理时,它也可以正常工作 当我在gdebugger中查看分配的纹理时,没有纹理对象,只有默认的2d纹理。当我在glTexImage2d上设置断点时,我看到它正在被调用,但当我用gdebugger查看它
发生什么事了?我忘了设置一些环境变量了吗?我很沮丧。关键是我以前有过这个问题,当时我设法解决了,但我忘了问题是什么。我恨我自己>\u>我无论如何都不是哈斯凯尔人,但试着做最简单的事情,看看你偏离了什么:
#include <GL/glut.h>
double aspect_ratio = 0;
GLuint texID = 0;
unsigned int texBuf[] = {
0x00FFFFFF,
0x00FF0000,
0x0000FF00,
0x000000FF,
};
void display(void)
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-10*aspect_ratio, 10*aspect_ratio, -10, 10, -10, 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3ub(255,255,255);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texID);
glScalef(8,8,8);
glTranslatef(-0.5f, -0.5f, 0.0f);
glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex2f(0,0);
glTexCoord2f(1,0);
glVertex2f(1,0);
glTexCoord2f(1,1);
glVertex2f(1,1);
glTexCoord2f(0,1);
glVertex2f(0,1);
glEnd();
glFlush();
glFinish();
glutSwapBuffers();
}
void reshape(int w, int h)
{
aspect_ratio = (double)w / (double)h;
glViewport(0, 0, w, h);
}
void idle()
{
glutPostRedisplay();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowSize(200,200);
glutCreateWindow("Aspect Ratio");
glGenTextures(1, &texID);
glBindTexture(GL_TEXTURE_2D, texID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, 4, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, (char*)texBuf);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutIdleFunc(idle);
glutMainLoop();
return 0;
}
#包括
双纵横比=0;
GLuint-texID=0;
无符号整数texBuf[]={
0x00FFFFFF,
0x00FF0000,
0x0000FF00,
0x000000FF,
};
作废显示(作废)
{
glEnable(GLU深度试验);
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(-10*纵横比,10*纵横比,-10,10,-10,10);
glMatrixMode(GLU模型视图);
glLoadIdentity();
glColor3ub(255255);
glEnable(GL_纹理_2D);
glBindTexture(GL_TEXTURE_2D,texID);
glScalef(8,8,8);
GLTRANSTEF(-0.5f,-0.5f,0.0f);
glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex2f(0,0);
glTexCoord2f(1,0);
glVertex2f(1,0);
glTexCoord2f(1,1);
glVertex2f(1,1);
glTexCoord2f(0,1);
glVertex2f(0,1);
格伦德();
glFlush();
glFinish();
glutSwapBuffers();
}
空洞重塑(整数w,整数h)
{
纵横比=(双)w/(双)h;
glViewport(0,0,w,h);
}
无效空闲()
{
再发现();
}
int main(int argc,字符**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_深度| GLUT_双精度);
glutInitWindowSize(200200);
窗口(“纵横比”);
glGenTextures(1和texID);
glBindTexture(GL_TEXTURE_2D,texID);
glTexParameteri(GL_纹理2D、GL_纹理包裹S、GL_重复);
glTexParameteri(GL_纹理2D、GL_纹理包裹、GL_重复);
glTexParameteri(GL_纹理2D,GL_纹理MAG_过滤器,GL_最近);
glTexParameteri(GL\u纹理\u 2D,GL\u纹理\u最小\u过滤器,GL\u最近);
glTexImage2D(GL_纹理,0,4,2,2,0,GL_RGBA,GL_无符号字节,(char*)texBuf);
glutDisplayFunc(显示器);
GLUTREFORUNC(重塑);
glutIdleFunc(空闲);
glutMainLoop();
返回0;
}
无论如何,我都不是哈斯凯尔人,但试着做最简单的事情,看看你偏离了什么:
#include <GL/glut.h>
double aspect_ratio = 0;
GLuint texID = 0;
unsigned int texBuf[] = {
0x00FFFFFF,
0x00FF0000,
0x0000FF00,
0x000000FF,
};
void display(void)
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-10*aspect_ratio, 10*aspect_ratio, -10, 10, -10, 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3ub(255,255,255);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texID);
glScalef(8,8,8);
glTranslatef(-0.5f, -0.5f, 0.0f);
glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex2f(0,0);
glTexCoord2f(1,0);
glVertex2f(1,0);
glTexCoord2f(1,1);
glVertex2f(1,1);
glTexCoord2f(0,1);
glVertex2f(0,1);
glEnd();
glFlush();
glFinish();
glutSwapBuffers();
}
void reshape(int w, int h)
{
aspect_ratio = (double)w / (double)h;
glViewport(0, 0, w, h);
}
void idle()
{
glutPostRedisplay();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowSize(200,200);
glutCreateWindow("Aspect Ratio");
glGenTextures(1, &texID);
glBindTexture(GL_TEXTURE_2D, texID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, 4, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, (char*)texBuf);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutIdleFunc(idle);
glutMainLoop();
return 0;
}
#包括
双纵横比=0;
GLuint-texID=0;
无符号整数texBuf[]={
0x00FFFFFF,
0x00FF0000,
0x0000FF00,
0x000000FF,
};
作废显示(作废)
{
glEnable(GLU深度试验);
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(-10*纵横比,10*纵横比,-10,10,-10,10);
glMatrixMode(GLU模型视图);
glLoadIdentity();
glColor3ub(255255);
glEnable(GL_纹理_2D);
glBindTexture(GL_TEXTURE_2D,texID);
glScalef(8,8,8);
GLTRANSTEF(-0.5f,-0.5f,0.0f);
glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex2f(0,0);
glTexCoord2f(1,0);
glVertex2f(1,0);
glTexCoord2f(1,1);
glVertex2f(1,1);
glTexCoord2f(0,1);
glVertex2f(0,1);
格伦德();
glFlush();
glFinish();
glutSwapBuffers();
}
空洞重塑(整数w,整数h)
{
纵横比=(双)w/(双)h;
glViewport(0,0,w,h);
}
无效空闲()
{
再发现();
}
int main(int argc,字符**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_深度| GLUT_双精度);
glutInitWindowSize(200200);
窗口(“纵横比”);
glGenTextures(1和texID);
glBindTexture(GL_TEXTURE_2D,texID);
glTexParameteri(GL_纹理2D、GL_纹理包裹S、GL_重复);
glTexParameteri(GL_纹理2D、GL_纹理包裹、GL_重复);
glTexParameteri(GL_纹理2D,GL_纹理MAG_过滤器,GL_最近);
glTexParameteri(GL\u纹理\u 2D,GL\u纹理\u最小\u过滤器,GL\u最近);
glTexImage2D(GL_纹理,0,4,2,2,0,GL_RGBA,GL_无符号字节,(char*)texBuf);
glutDisplayFunc(显示器);
GLUTREFORUNC(重塑);
glutIdleFunc(空闲);
glutMainLoop();
返回0;
}
我不久前将OpenGL移植到Haskell。它包括一个指向一个非常小的库的链接,该库除其他外,还可以帮助您完成以下任务
也许您可以将这些代码与您必须的代码进行比较,找出差异。我不久前将OpenGL移植到Haskell。它包括一个指向一个非常小的库的链接,该库除其他外,还可以帮助您完成以下任务
也许您可以将该代码与您必须的代码进行比较,找出差异。您还可以调用glGetError(),看看它是否试图告诉您出了什么问题……代码中显然存在错误。所以发布一些代码。相关:您也可以调用glGetError(),看看它是否试图告诉您出了什么问题……您的代码中显然存在错误。所以发布一些代码。相关:我没有为纹理设置过滤模式!很明显,这造成了问题。我没有为纹理设置过滤模式!很明显,这造成了问题。