gpt4 book ai didi

c++ - OpenGL glfw无法使用着色器绘制点

转载 作者:行者123 更新时间:2023-12-03 07:02:07 24 4
gpt4 key购买 nike

我正在使用GLFW进行窗口上下文创建。
我有一个procs.hpp文件,该文件仅使用glCreateShader加载所需的opengl函数(例如glCreateProgramglxGetProcAddress等)。
该程序编译成功,但是运行时屏幕上没有任何提示。只是粉红色的背景。
有人可以指出错误吗?

#include <GLFW/glfw3.h>
#include <iostream>
#include <GL/glx.h>
#include <stdio.h>
#include "procs.hpp"

constexpr const GLchar * vertex_shader_source =
R"(#version 450 core

void main(){
gl_Position = vec4(0.3, 0.3, 0.5, 1.0);
}

)";

int a= printf("%s",vertex_shader_source);

constexpr const GLchar * fragment_shader_source =
R"(#version 450 core
out vec4 out_color;
void main(){
out_color= vec4(1,0,0,1);
}
)";

int main()
{
GLFWwindow* window;
GLuint vertex_shader;
GLuint fragment_shader;
GLuint program;
GLuint vertex_array_object;

/* Initialize the library */
if (!glfwInit()){
std::cerr<<"Error initializing glfw";
return -1;
}

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(1000, 800, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}

/* Make the window's context current */
glfwMakeContextCurrent(window);

vertex_shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex_shader, 1, &vertex_shader_source, nullptr);
glCompileShader(vertex_shader);

fragment_shader = glCreateShader(GL_FRAGMENT_SHADER) ;
glShaderSource(fragment_shader,1,&fragment_shader_source,nullptr);
glCompileShader(fragment_shader);

program = glCreateProgram();
glAttachShader(program,vertex_shader);
glAttachShader(program,fragment_shader);
glLinkProgram(program);

// Delete the shaders as the program has them now
glDeleteShader(vertex_shader);
glDeleteShader(fragment_shader);

glCreateVertexArrays(1, &vertex_array_object);
glBindVertexArray(vertex_array_object);

glClearColor(1,0,1,1);
glPointSize(10.0f);
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */

glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(program);
glDrawArrays(GL_POINTS, 0, 1);

/* Swap front and back buffers */
glfwSwapBuffers(window);

/* Poll for and process events */
glfwPollEvents();
}

glDeleteProgram(program);

glfwTerminate();
return 0;
}

最佳答案

不能保证 glPointSize 提供的点大小(OpenGL Context)为10.0。
通过获取参数GL_POINT_SIZE_RANGE获得点大小范围:

GLfloat pointSizeRange[2];
glGetFloatv(GL_POINT_SIZE_RANGE, pointSizeRange);

关于c++ - OpenGL glfw无法使用着色器绘制点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64293554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com