diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2022-04-02 09:13:33 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2022-04-02 09:13:33 +0400 |
| commit | 806a1e093eeac8b426b20717c14260c9cb896798 (patch) | |
| tree | 7b6e1a01958269ce78b9716461a9fa4c05d3dc5e /src/canvas.h | |
| parent | 15ccb946f43283bfc91d80ddf012d9ae2a0333ed (diff) | |
Removed CUDA files and changed build system to premakeremake
Diffstat (limited to 'src/canvas.h')
| -rw-r--r-- | src/canvas.h | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/canvas.h b/src/canvas.h new file mode 100644 index 0000000..84dbe56 --- /dev/null +++ b/src/canvas.h @@ -0,0 +1,117 @@ +// +// Created by saintruler on 04.05.19. +// + +#ifndef OPENGLTEST_CANVAS_H +#define OPENGLTEST_CANVAS_H + +#include <glad/glad.h> +#include <GLFW/glfw3.h> + +#include <iostream> + +struct Color +{ + unsigned int r = 0, g = 0, b = 0; +}; + +class Canvas +{ +public: + Canvas(int width, int height) + { +// vertices = { +// // positions // colors // texture coords +// 1.f, 1.f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // top right +// 1.f, -1.f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // bottom right +// -1.f, -1.f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // bottom left +// -1.f, 1.f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // top left +// }; +// +// indices = { +// 0, 1, 3, // first triangle +// 1, 2, 3 // second triangle +// }; + + glGenVertexArrays(1, &VAO); + glGenBuffers(1, &VBO); + glGenBuffers(1, &EBO); + + glBindVertexArray(VAO); + + glBindBuffer(GL_ARRAY_BUFFER, VBO); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); + + // position attribute + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0); + glEnableVertexAttribArray(0); + // color attribute + glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float))); + glEnableVertexAttribArray(1); + // texture coord attribute + glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float))); + glEnableVertexAttribArray(2); + + + this->width = width; + this->height = height; + + canvas = (unsigned char*) malloc(width * height * 3); + glGenTextures(1, &texture); + } + + void SetPixel(int x, int y, Color color) + { + canvas[y * width * 3 + x * 3 + 0] = color.r; + canvas[y * width * 3 + x * 3 + 1] = color.g; + canvas[y * width * 3 + x * 3 + 2] = color.b; + + UpdateTexture(); + } + + void UpdateTexture() + { + // all upcoming GL_TEXTURE_2D operations now have effect on this texture object + glBindTexture(GL_TEXTURE_2D, texture); + + // set texture wrapping to GL_REPEAT (default wrapping method) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + // set texture filtering parameters + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, width, 0, GL_RGB, GL_UNSIGNED_BYTE, canvas); + glGenerateMipmap(GL_TEXTURE_2D); + } + + void DrawTexture() + { + glBindTexture(GL_TEXTURE_2D, texture); + // render container +// ourShader.use(); + glBindVertexArray(VAO); + glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); + } + + unsigned int* GetTexture() + { + return &(this->texture); + } + +private: + int width, height; + unsigned char* canvas; + unsigned int texture; + + unsigned int VBO, VAO, EBO; + + float* vertices; + unsigned int* indices; +}; + +#endif //OPENGLTEST_CANVAS_H |