Bo wczytuje do maszyny stanów OpenGL
Kopiuj
#include <GL/glut.h> // albo GLFW/GLAD jeśli wolisz
#include <iostream>
GLuint tex;
void init() {
// Tworzymy pustą teksturę 256x256
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0,
GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glEnable(GL_TEXTURE_2D);
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
// 1. Rysujemy coś (np. kolorowy trójkąt) do ekranu
glBegin(GL_TRIANGLES);
glColor3f(1, 0, 0); glVertex2f(-0.5f, -0.5f);
glColor3f(0, 1, 0); glVertex2f( 0.5f, -0.5f);
glColor3f(0, 0, 1); glVertex2f( 0.0f, 0.5f);
glEnd();
// 2. Kopiujemy fragment ekranu do tekstury
glBindTexture(GL_TEXTURE_2D, tex);
glCopyTexSubImage2D(
GL_TEXTURE_2D,
0, // mipmap level
0, 0, // offset w teksturze
50, 50, // skąd w framebufferze (x,y)
128, 128 // szer., wys.
);
// 3. Rysujemy kwadrat z tą teksturą
glColor3f(1,1,1);
glBegin(GL_QUADS);
glTexCoord2f(0,0); glVertex2f(-0.9f, -0.9f);
glTexCoord2f(1,0); glVertex2f(-0.2f, -0.9f);
glTexCoord2f(1,1); glVertex2f(-0.2f, -0.2f);
glTexCoord2f(0,1); glVertex2f(-0.9f, -0.2f);
glEnd();
glutSwapBuffers();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(800, 600);
glutCreateWindow("glCopyTexSubImage2D example");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}