§ 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-2022 Суперприз - права на автомобиль