Why doesn't glCopyTexSubImage2D copy my square correctly?
here is the output: http://i43.tinypic.com/9a5zyx.png if things were working the way i wanted, the colors in the left square would match the colors in the right square. thanks for any help regarding the subject
#include <gl/glfw.h> const char* title="test"; GLuint img; unsigned int w=64,h=64; int screenwidth,screenheight; void enable2d() { glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glViewport(0,0,screenwidth,screenheight); glOrtho(0,screenwidth,screenheight,0,-1,1); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glPushAttrib(GL_DEPTH_BUFFER_BIT|GL_LIGHTING_BIT); glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glClearColor(0.0f, 0.0f, 0.0f, 0.5f); } void drawmytex() { glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D,img); glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex2i(0,0); glTexCoord2i(1,0); glVertex2i(w,0); glTexCoord2i(1,1); glVertex2i(w,h); glTexCoord2i(0,1); glVertex2i(0,h); glEnd(); glDisable(GL_TEXTURE_2D); } void drawquad(int x,int y) { glBegin(GL_QUADS); glColor3f(0.0f,1.0f,0.0f); glVertex2i(x,y); glColor3f(1.0f,0.0f,1.0f); glVertex2i(x+w,y); glColor3f(0.0f,1.0f,1.0f); glVertex2i(x+w,y+h); glColor3f(0.0f,0.0f,1.0f); glVertex2i(x,y+h); glEnd(); } void texcopy() { if (!glIsTexture(img)) glDeleteTextures(1,&img); glGenTextures(1,&img); glBindTexture(GL_TEXTURE_2D,img); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,w,h,0,GL_RGBA,GL_UNSIGNED_BYTE,0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,w,h,0,-1,1); glViewport(0,0,w,h); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); drawquad(0,0); glBindTexture(GL_TEXTURE_2D,img); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); //glCopyTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,0,0,w,h,0); glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,screenwidth,screenheight,0,-1,1); glViewport(0,0,screenwidth,screenheight); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main() { int running; glfwInit(); running=glfwOpenWindow(640,480,0,0,0,0,0,0,GLFW_WINDOW); if (!running) { glfwTerminate(); return 0; } glfwSetWindowTitle(title); glfwEnable(GLFW_STICKY_KEYS); glfwGetWindowSize(&screenwidth,&screenheight); enable2d(); texcopy(); do { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); drawquad(64,0); drawmytex(); glfwSwapBuffers(); running=!glfwGetKey(GLFW_KEY_ESC)&&glfwGetWindowParam(GLFW_OPENED); GLenum error=glGetError(); if (error!=GL_NO_ERROR)running=error; glfwSleep(.017); } while (running==1); glDeleteTextures(1,&img); glfwTerminate(); return running; }
Try adding 'glColor3f(1,1,1);' in your 'drawmytex' function. I suspect that your texture is modulated (multiplied) with the current color, if so, the problem is not the texture copy but the way you display it.
链接地址: http://www.djcxy.com/p/34048.html