§ main.cc
Примитивный треугольник в пространстве со сгенерированной текстурой.#define SDL_MAIN_HANDLED #include <SDL2/SDL.h> #include <GL/gl.h> #include <stdlib.h> #include <stdio.h> int main() { SDL_Event event; bool running = true; SDL_Init(SDL_INIT_EVERYTHING); SDL_Window* window = SDL_CreateWindow("OpenGL Demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1024, 768, SDL_WINDOW_OPENGL); SDL_GLContext glcontext = SDL_GL_CreateContext(window); // -------------- int w = 256, h = 256; GLuint bgra[w*h]; GLuint texture_id; // Создать тестовую текстуру for (int i = 0; i < h; i++) for (int j = 0; j < w; j++) { bgra[i*h + j] = (i ^ j) * 256; } // Текстура создается в памяти, назначается GLuint glGenTextures(1, (GLuint *) & texture_id); glBindTexture(GL_TEXTURE_2D, texture_id); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, bgra); // -------------- glEnable(GL_TEXTURE_2D); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1, 1, -1, 1, 1, 40); while (running) { while (SDL_PollEvent(&event) != 0) { if (event.type == SDL_QUIT) { running = false; } } glClearColor(0, 0, 0.5, 1); glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glBegin(GL_POLYGON); glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.6, 0.75, -1.2); glTexCoord2f(1.0f, 0.0f); glVertex3f( 0.6, 0.75, -1.2); glTexCoord2f(1.0f, 1.0f); glVertex3f( 0.6, -0.75, -1.2); glEnd(); SDL_GL_SwapWindow(window); } // -------------- SDL_GL_DeleteContext(glcontext); }
§ makefile
all: g++ -o main main.cc -lSDL2 -lGL ./main
5 июл, 2022
© 2007-2023 У каждого человека в жизни появляется автомобиль и права