gpt4 book ai didi

opengl - 使用 GL_TEXTURE_RECTANGLE 时 glTexImage2D 不工作

转载 作者:行者123 更新时间:2023-12-01 15:23:07 26 4
gpt4 key购买 nike

我正在尝试编写一个“BMP 播放器”。我的主要目标是快速完成!我需要达到 60fps。我正在将所有图像加载到内存中,然后使用 glTexImage2D 切换纹理内容。

当我使用命令时:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, g_width, g_height, 0, GL_RGB, GL_UNSIGNED_BYTE, currentlyPlatedFrame->data);

影片在低分辨率(720p 及更低)下运行良好 (60fps),但在高清或更高分辨率下帧率非常低(我需要达到 1600p)。

我在网上搜索了一下,发现 GL_TEXTURE_2D 适用于 2 次幂的正方形纹理,这意味着在播放 1920x1080 时我实际上是在播放 2048x2048(一个 squer,在 1280 之后的下一个 2 次幂)并使我的程序更快我需要使用 GL_TEXTURE_RECTANGLE。

我的问题是,当我将代码中的所有 GL_TEXTURE_2D 更改为 GL_TEXTURE_RECTANGLE 时,我的播放器只显示整个屏幕上的第一个像素。

从 2D 切换到 RECTANGLE 时,还有其他需要更改的地方吗?谁能看到我做错了什么?或者,如果您对如何使用 GL_TEXTURE_2D 有想法,但速度更快,那将对我有很大帮助。

我在 win7 和 VS2010 上工作

我的代码(相关部分):

#include <glew.h>
#include <glfw.h>

glfwInit();
glEnable(GL_DEPTH_TEST);
glEnable( GL_TEXTURE_2D );
if( !glfwOpenWindow( g_width, g_height, 8, 8, 8, 0, 0, 0, GLFW_FULLSCREEN ))
{
glfwTerminate(); //terminating glfw window
return 0;
}

glfwSetWindowTitle("Texture");
glfwSetWindowSizeCallback(handleResize);
glfwSetKeyCallback(handleKeypress);
glfwEnable(GLFW_MOUSE_CURSOR);
glfwSwapInterval(1);

glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); //clear background screen to black

//Clear information from last draw
glClear( GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glGenTextures(1,&Texture); //allocate the memory for texture
glBindTexture(GL_TEXTURE_2D,Texture); //Binding the texture

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glEnable(GL_TEXTURE_2D); //Enable texture

currentlyPlatedFrame = goToFirstFrameToPlay(headOfList,startFrameNum);

glBindTexture(GL_TEXTURE_2D,Texture);
while (1)
{
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, g_width, g_height, 0, GL_RGB, GL_UNSIGNED_BYTE, currentlyPlatedFrame->data);

glPushMatrix();//move out of loop
glBegin(GL_POLYGON); //Begin quadrilateral coordinates
glNormal3f(0.0f, 0.0f, 1.0f);//normal vector
glTexCoord2f(0.0f, 0.0f); //Texture co-ordinate origin or lower left corner
glVertex3f(-1.0f,-1.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); //Texture co-ordinate lower right corner
glVertex3f(1.0f, -1.0f,0.0f);
glTexCoord2f(1.0f, 1.0f);//Texture co-ordinate top right corner
glVertex3f(1.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f);//Texture co-ordinate top left corner
glVertex3f(-1.0f, 1.0f, 0.0f);
glEnd(); //End quadrilateral coordinates
glPopMatrix();//move out of loop
glFinish();//add glfinish
glfwSwapBuffers();
numOfPlayedFrames++;

currentlyPlatedFrame = currentlyPlatedFrame->next;
}

最佳答案

对于那些来这里寻求解决方案的访客;使用矩形纹理时,必须在 (0,0) - (tex_width, tex_height) 范围内指定坐标,而不是 (0,0) - (1,1)。

关于opengl - 使用 GL_TEXTURE_RECTANGLE 时 glTexImage2D 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16058387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com