OpenGL_8:着色器之间的变量传递
来源:互联网 发布:哪个软件可以搜高数题 编辑:程序博客网 时间:2024/06/05 07:11
#include <stdio.h>#include <GLAD/glad.h>#include <GLFW/glfw3.h>const char *vertexShaderSource = "#version 330 core\n" "layout (location = 0) in vec3 aPos;\n" "out vec4 vertexColor;" //为片段着色器指定一个颜色输出 "void main(){\n" "gl_Position = vec4(aPos, 1.0f);\n" "vertexColor = vec4(0.5f, 0.0f, 0.0f, 1.0f);"// 把输出变量设置为暗红色 "}\n\0";const char *fragmentShaderSource = "#version 330 core\n" "out vec4 FragColor;\n" "in vec4 vertexColor;" "void main(){\n" "FragColor = vertexColor;\n" "}\n\0";const unsigned int SCR_WIDTH = 800;const unsigned int SCR_HEIGHT = 600;void framebuffer_size_callback(GLFWwindow* glfWwindow, int width, int height);int main() { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); GLFWwindow *glfWwindow = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "shader", NULL, NULL); if (NULL == glfWwindow){ printf("Failed to create window\n"); glfwTerminate(); return -1; } glfwMakeContextCurrent(glfWwindow); glfwSetFramebufferSizeCallback(glfWwindow, framebuffer_size_callback); if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){ printf("Failed to initialize GLAD\n"); } int success; char infoLog[512]; unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertexShaderSource, NULL); glCompileShader(vertexShader); glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success); if (!success){ glGetShaderInfoLog(vertexShader, 512, NULL, infoLog); printf("Failed to compile vertexShader:%s\n", infoLog); } unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); glCompileShader(fragmentShader); glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); if (!success){ glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog); printf("Failed to compile fragmentShader:%s\n", infoLog); } unsigned int shaderProgram = glCreateProgram(); glAttachShader(shaderProgram, vertexShader); glAttachShader(shaderProgram, fragmentShader); glLinkProgram(shaderProgram); glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success); if (!success){ glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog); printf("Failed to linkProgram:%s\n", infoLog); } glDeleteShader(vertexShader); glDeleteShader(fragmentShader); float vertices[] = { -0.5f, -0.5f, 0.0f, 0.0f, 0.5f, 0.0f, 0.5f, -0.5f, 0.0f }; unsigned int VBO, VAO; glGenBuffers(1, &VBO); 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, 3 * sizeof(float), (void*)0); glEnableVertexAttribArray(0);// glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); while (!glfwWindowShouldClose(glfWwindow)){ glUseProgram(shaderProgram); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES, 0, 3); glfwSwapBuffers(glfWwindow); glfwPollEvents(); } return 0;}void framebuffer_size_callback(GLFWwindow* glfWwindow, int width, int height){ glViewport(0, 0, width, height);}
运行结果:
阅读全文
0 0
- OpenGL_8:着色器之间的变量传递
- OpenGL与GLSL之间变量的传递
- mfc对话框窗口之间变量的传递
- Python与Shell之间变量的传递
- PHP文件中变量之间的传递
- java变量和javascript变量之间的传递
- 在OpenGL中,顶点着色器的输出是如何传递到片段着色器的?
- OGLES 程序和着色器间的数据传递
- JMeter 线程之间传递变量
- 两个html之间传递变量
- Jmeter 线程之间传递变量
- 窗口之间变量参数传递的实现方法
- awk与shell之间的变量互相传递方法
- awk与shell之间的变量传递方法
- VC中控件和变量之间数据传递的方式
- 如何在两个类之间传递成员变量的值
- Built-in shader variables //内置的着色器变量
- Built-in shader variables 内置的着色器变量
- 创建继承类Perint的类Student
- 快速幂讲解
- NIO
- dict和set的key不可变
- hibernate配置文件
- OpenGL_8:着色器之间的变量传递
- linux进程及系统服务的控制
- 栈简单实现
- UVM Practice Chap2
- 数论+gcd
- Java中String类转换为Date日期显示
- 撤销修改
- 乐观锁与悲观锁深入学习
- C++11多线程生产者与消费者