Advertisement
Guest User

Untitled

a guest
Mar 13th, 2024
89
0
123 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.32 KB | Source Code | 0 0
  1. #include <glad/glad.h>
  2. #include <SDL3/SDL.h>
  3.  
  4. #include "shader.h"
  5.  
  6.  
  7. using namespace std;
  8.  
  9.  
  10.  
  11. int main(int argc, char* argv[]) {
  12.  
  13.     SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
  14.     SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
  15.     SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
  16.  
  17.     SDL_Window *window = SDL_CreateWindow("OpenGL Demo", 800, 600, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
  18.     SDL_Renderer *renderer = SDL_CreateRenderer(window, "opengl", 0);
  19.     SDL_RendererInfo info;
  20.     SDL_GetRendererInfo(renderer, &info);
  21.     SDL_Log("%s", info.name);
  22.  
  23.     SDL_GLContext context = SDL_GL_GetCurrentContext();
  24.     if (context == NULL)
  25.         SDL_LogError(0, "Failed to initialize OpenGL context: %s", SDL_GetError());
  26.  
  27.     if (!gladLoadGLLoader((GLADloadproc)SDL_GL_GetProcAddress))
  28.         SDL_LogError(0, "Failed to initialize GALD!");
  29.  
  30.     glViewport(0, 0, 800, 600);
  31.  
  32.     bool running = true;
  33.     SDL_Event event;
  34.  
  35.     float vertices[] = {
  36.         // Positions        // Colour         // Texture coord
  37.         -0.5f,  0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, // top-left
  38.          0.5f,  0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // top-right
  39.          0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom-right
  40.         -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom-left
  41.     };
  42.  
  43.     unsigned int indices[] = {
  44.         0, 1, 2,
  45.         0, 2, 3
  46.     };
  47.  
  48.     unsigned int VBO;
  49.     glGenBuffers(1, &VBO);
  50.     glBindBuffer(GL_ARRAY_BUFFER, VBO);
  51.     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  52.  
  53.    
  54.  
  55.     // Shader Program
  56.     Shader shader("../src/sdl-shader-opengl/shader.vert", "../src/sdl-shader-opengl/shader.frag");
  57.  
  58.     // VAOs
  59.     unsigned int VAO;
  60.     glGenVertexArrays(1, &VAO);
  61.  
  62.     glBindVertexArray(VAO);
  63.  
  64.     glBindBuffer(GL_ARRAY_BUFFER, VBO);
  65.     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  66.  
  67.     glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8*sizeof(float), (void *)0);
  68.     glEnableVertexAttribArray(0);
  69.  
  70.     glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8*sizeof(float), (void *)(3*sizeof(float)));
  71.     glEnableVertexAttribArray(1);
  72.  
  73.     glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8*sizeof(float), (void *)(6*sizeof(float)));
  74.     glEnableVertexAttribArray(2);
  75.  
  76.     // EBOs
  77.     unsigned int EBO;
  78.     glGenBuffers(1, &EBO);
  79.  
  80.     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
  81.     glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
  82.  
  83.     SDL_Texture *tex = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_TARGET, 800, 600);
  84.     GLint tex_id = SDL_GetNumberProperty(SDL_GetTextureProperties(tex), SDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER, 0);
  85.  
  86.     SDL_FRect rect = {0, 0, 100, 100};
  87.  
  88.     while (running) {
  89.  
  90.         while (SDL_PollEvent(&event)) {
  91.             if (event.type == SDL_EVENT_QUIT)
  92.                 running = false;
  93.         }
  94.  
  95.         SDL_SetRenderTarget(renderer, tex);
  96.         SDL_SetRenderDrawColor(renderer, 255, 255, 0, 255);
  97.         SDL_RenderClear(renderer);
  98.         SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
  99.         SDL_RenderFillRect(renderer, &rect);
  100.         SDL_SetRenderTarget(renderer, NULL);
  101.  
  102.         SDL_FlushRenderer(renderer);
  103.  
  104.         glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
  105.         glClear(GL_COLOR_BUFFER_BIT);
  106.  
  107.         shader.use();
  108.         glBindTexture(GL_TEXTURE_2D, tex_id);
  109.         glBindVertexArray(VAO);
  110.         glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
  111.         glBindVertexArray(0);
  112.  
  113.         SDL_GL_SwapWindow(window);
  114.     }
  115.  
  116.     return 0;
  117. }
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement