Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <glad/glad.h>
- #include <SDL3/SDL.h>
- #include "shader.h"
- using namespace std;
- int main(int argc, char* argv[]) {
- SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
- SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
- SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
- SDL_Window *window = SDL_CreateWindow("OpenGL Demo", 800, 600, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
- SDL_Renderer *renderer = SDL_CreateRenderer(window, "opengl", 0);
- SDL_RendererInfo info;
- SDL_GetRendererInfo(renderer, &info);
- SDL_Log("%s", info.name);
- SDL_GLContext context = SDL_GL_GetCurrentContext();
- if (context == NULL)
- SDL_LogError(0, "Failed to initialize OpenGL context: %s", SDL_GetError());
- if (!gladLoadGLLoader((GLADloadproc)SDL_GL_GetProcAddress))
- SDL_LogError(0, "Failed to initialize GALD!");
- glViewport(0, 0, 800, 600);
- bool running = true;
- SDL_Event event;
- float vertices[] = {
- // Positions // Colour // Texture coord
- -0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, // top-left
- 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // top-right
- 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom-right
- -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom-left
- };
- unsigned int indices[] = {
- 0, 1, 2,
- 0, 2, 3
- };
- unsigned int VBO;
- glGenBuffers(1, &VBO);
- glBindBuffer(GL_ARRAY_BUFFER, VBO);
- glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
- // Shader Program
- Shader shader("../src/sdl-shader-opengl/shader.vert", "../src/sdl-shader-opengl/shader.frag");
- // VAOs
- unsigned int VAO;
- glGenVertexArrays(1, &VAO);
- glBindVertexArray(VAO);
- glBindBuffer(GL_ARRAY_BUFFER, VBO);
- glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8*sizeof(float), (void *)0);
- glEnableVertexAttribArray(0);
- glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8*sizeof(float), (void *)(3*sizeof(float)));
- glEnableVertexAttribArray(1);
- glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8*sizeof(float), (void *)(6*sizeof(float)));
- glEnableVertexAttribArray(2);
- // EBOs
- unsigned int EBO;
- glGenBuffers(1, &EBO);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
- SDL_Texture *tex = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_TARGET, 800, 600);
- GLint tex_id = SDL_GetNumberProperty(SDL_GetTextureProperties(tex), SDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER, 0);
- SDL_FRect rect = {0, 0, 100, 100};
- while (running) {
- while (SDL_PollEvent(&event)) {
- if (event.type == SDL_EVENT_QUIT)
- running = false;
- }
- SDL_SetRenderTarget(renderer, tex);
- SDL_SetRenderDrawColor(renderer, 255, 255, 0, 255);
- SDL_RenderClear(renderer);
- SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
- SDL_RenderFillRect(renderer, &rect);
- SDL_SetRenderTarget(renderer, NULL);
- SDL_FlushRenderer(renderer);
- glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- shader.use();
- glBindTexture(GL_TEXTURE_2D, tex_id);
- glBindVertexArray(VAO);
- glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
- glBindVertexArray(0);
- SDL_GL_SwapWindow(window);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement