Advertisement
Guest User

Untitled

a guest
Apr 11th, 2021
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <streambuf>
  4. #include <string>
  5. #include <glad/glad.h>
  6. #include <GLFW/glfw3.h>
  7.  
  8. using namespace std;
  9.  
  10. void framebuffer_size_callback(GLFWwindow* window, int width, int height)
  11. {
  12.     glViewport(0, 0, width, height);
  13. }
  14.  
  15. int main()
  16. {
  17.     glfwInit();
  18.     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  19.     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
  20.     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
  21.     GLFWwindow* window = glfwCreateWindow(800, 600, "Hello", nullptr, nullptr);
  22.     if(window == nullptr) {
  23.         cout << "Failed to create GLFW window" << endl;
  24.         glfwTerminate();
  25.         return -1;
  26.     }
  27.     glfwMakeContextCurrent(window);
  28.     if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
  29.     {
  30.         std::cout << "Failed to initialize GLAD" << std::endl;
  31.         return -1;
  32.     }
  33.  
  34.     glViewport(0, 0, 800, 600);
  35.     glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);  
  36.    
  37.     float vertices[] = {
  38.         // positions          // texture coords
  39.          0.5f,  0.5f, 0.0f, 0.0f, 0.0f,     // top right
  40.          0.5f, -0.5f, 0.0f, 0.0f, 1.0f,     // bottom right
  41.         -0.5f, -0.5f, 0.0f, 1.0f, 1.0f,     // bottom left
  42.         -0.5f,  0.5f, 0.0f, 1.0f, 0.0f,     // top left
  43.     };
  44.  
  45.     unsigned int indices[] = {
  46.         0, 1, 3,
  47.         1, 2, 3
  48.     };
  49.     unsigned int EBO;
  50.     glGenBuffers(1, &EBO);
  51.     unsigned int VBO;
  52.     glGenBuffers(1, &VBO);
  53.     glBindBuffer(GL_ARRAY_BUFFER, VBO);
  54.     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  55.  
  56.     cout << "HELLOO" << endl;
  57.     ifstream vertexShader("shaders/vertex.glsl");
  58.     std::string str((std::istreambuf_iterator<char>(vertexShader)),
  59.                  std::istreambuf_iterator<char>());
  60.     const char* vsData = str.c_str();
  61.     unsigned int vs = glCreateShader(GL_VERTEX_SHADER);
  62.     glShaderSource(vs, 1, &vsData, nullptr);
  63.     glCompileShader(vs);
  64. {    int  success;
  65.     char infoLog[512];
  66.     glGetShaderiv(vs, GL_COMPILE_STATUS, &success);
  67.     if(!success)
  68.     {
  69.         glGetShaderInfoLog(vs, 512, NULL, infoLog);
  70.         std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
  71.     }}
  72.  
  73.     cout << "HELLOO" << endl;
  74.     ifstream fragShader("shaders/frag.glsl");
  75.     std::string fragmentShaderSource((std::istreambuf_iterator<char>(fragShader)),
  76.                  std::istreambuf_iterator<char>());
  77.     const char* fsData = fragmentShaderSource.c_str();
  78.     unsigned int fragmentShader;
  79.     fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
  80.     glShaderSource(fragmentShader, 1, &fsData, NULL);
  81.     glCompileShader(fragmentShader);
  82.  
  83.     unsigned int shaderProgram;
  84.     shaderProgram = glCreateProgram();
  85.     glAttachShader(shaderProgram, vs);
  86.     glAttachShader(shaderProgram, fragmentShader);
  87.     glLinkProgram(shaderProgram);
  88.     glUseProgram(shaderProgram);
  89.  
  90.     glDeleteShader(vs);
  91.     glDeleteShader(fragmentShader);
  92.  
  93.     unsigned int VAO;
  94.     glGenVertexArrays(1, &VAO);  
  95.  
  96.     glBindVertexArray(VAO);
  97.     // 2. copy our vertices array in a buffer for OpenGL to use
  98.     glBindBuffer(GL_ARRAY_BUFFER, VBO);
  99.     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  100.     // 3. then set our vertex attributes pointers
  101.     glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), nullptr);
  102.     glEnableVertexAttribArray(0);
  103.     glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));
  104.     glEnableVertexAttribArray(1);
  105.  
  106.     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
  107.     glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
  108.  
  109.     cout << "HELLOO" << endl;
  110.     int tex_w = 512, tex_h = 512;
  111.     GLuint tex_output;
  112.     glGenTextures(1, &tex_output);
  113.     glActiveTexture(GL_TEXTURE0);
  114.     glBindTexture(GL_TEXTURE_2D, tex_output);
  115.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  116.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  117.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  118.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  119.     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, tex_w, tex_h, 0, GL_RGBA, GL_FLOAT,
  120.      nullptr);
  121.     glBindImageTexture(0, tex_output, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA32F);
  122.  
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement