glEnable (GL_TEXTURE_RECTANGLE_ARB); GL_ERR (); glBindTexture (GL_TEXTURE_RECTANGLE_ARB, sc_main_tex); GL_ERR (); # ifdef PBO glBindBufferARB (GL_PIXEL_UNPACK_BUFFER_ARB, sc_main_texbuf); GL_ERR (); # else glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, 640, 480, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, rgbpage); GL_ERR (); # endif # ifdef PBO glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, 640, 480, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, 0); GL_ERR (); // glBindBufferARB (GL_PIXEL_UNPACK_BUFFER_ARB, sc_main_texbuf); GL_ERR (); glBufferDataARB (GL_PIXEL_UNPACK_BUFFER_ARB, 640 * 480 * 4, 0, GL_STREAM_DRAW_ARB); GL_ERR (); ptr = (GLubyte *)glMapBufferARB (GL_PIXEL_UNPACK_BUFFER_ARB, GL_WRITE_ONLY_ARB); GL_ERR (); if (ptr) { // memcpy (ptr, rgbpage, 640 * 480 * 4); /*sc-bild übertragen*/ p1 = intpage; p2 = intpage + 640; q1 = (int *)ptr; q2 = (int *)(ptr + 640 * 4); for (n = 0; n < 480 / 2; n++) { int m; /*TODO: optimieren mit vier p's auf einmal?*/ for (m = 0; m < 640; m++) { *q1++ = palette_r[*p1++]; *q2++ = palette_r[*p2++]; } p1 += 640; p2 += 640; q1 += 640; q2 += 640; } glUnmapBufferARB (GL_PIXEL_UNPACK_BUFFER_ARB); GL_ERR (); } glBindBufferARB (GL_PIXEL_UNPACK_BUFFER_ARB, 0); GL_ERR (); # endif