Why doesn't glCopyTexSubImage2D copy my square correctly?

here is the result: http://i43.tinypic.com/9a5zyx.png if everything worked the way I wanted, the colors on the left square would correspond to the colors on 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,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,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;
}
+3
source share
1 answer

'glColor3f (1,1,1);' drawmytex. , () , , , , .

+2

Source: https://habr.com/ru/post/1704706/


All Articles