OpenGL中没有显示任何内容 我已经在java和C++中工作了一段时间,但是我对OpenGL是新的,所以我开始使用一个名为GLFW的库,我正在遵循一本书,叫做“OpenGL超级圣经第六版”,但是在GLFW模式中。这里的问题是,我已经重新检查了所有内容,并观看了其他教程,我的代码接缝正常,但着色器渲染中没有任何内容。我不知道我声明着色器src的部分是正确的还是有效的形式
感谢您阅读本文:) 注: 我知道它只会渲染一个点,但我用“glPointSize(40.0f);”调整了它的大小OpenGL中没有显示任何内容 我已经在java和C++中工作了一段时间,但是我对OpenGL是新的,所以我开始使用一个名为GLFW的库,我正在遵循一本书,叫做“OpenGL超级圣经第六版”,但是在GLFW模式中。这里的问题是,我已经重新检查了所有内容,并观看了其他教程,我的代码接缝正常,但着色器渲染中没有任何内容。我不知道我声明着色器src的部分是正确的还是有效的形式,c++,opengl,glfw,C++,Opengl,Glfw,感谢您阅读本文:) 注: 我知道它只会渲染一个点,但我用“glPointSize(40.0f);”调整了它的大小 #包括 #定义GLFW_DLL #包括 #包括 #包括 #包括“jelly/lua_manager.h” #包括“jelly/keysManager.h” jelly::keys_buttons::KeysManager km; 胶合顶点数组; GLuint程序; GLuint startRender(GLFWwindow*窗口) { GLuint vertexShader=glCr
#包括
#定义GLFW_DLL
#包括
#包括
#包括
#包括“jelly/lua_manager.h”
#包括“jelly/keysManager.h”
jelly::keys_buttons::KeysManager km;
胶合顶点数组;
GLuint程序;
GLuint startRender(GLFWwindow*窗口)
{
GLuint vertexShader=glCreateShader(GL_VERTEX_SHADER);
GLuint fragmentShader=glCreateShader(GL\u fragmentShader);
std::cout包含着色器源的两个变量命名不正确。您已将顶点源错误地放置到fragmentShader\u src
中,并将源片段错误地放置到vertexShader\u src
中
如果检查着色器编译和链接状态,则很容易发现错误。如果着色器编译或链接失败,则应添加相应的if
s并打印日志
此外,您还缺少一个明确的OpenGL版本选择。您应该要求GLFW为您提供“OpenGL 4.3兼容性配置文件”上下文。(“核心配置文件”也适用于您不需要任何不推荐的功能。)查看GLFW文档以了解如何操作。您应该检查着色器是否实际编译和链接。您还应该检查您获得的OpenGL版本。明确请求核心配置文件在某些平台上可能也会有所帮助。是的,在我的Makefile中有很多奇特的东西,我已经切换了它们,但仍然不起作用。等等,但是我不知道如何检查GLSL文件中的错误编译,甚至不知道如何检查编译是否正常。@CavariuX使用任何好的OpenGL教程。或者检查glewInit()的返回状态
。此外,您缺少OpenGL版本选择。您应该要求GLFW为您提供“OpenGL 4.3兼容性配置文件”上下文。有关如何操作的信息,请查看GLFW文档。
#include <GL/glew.h>
#define GLFW_DLL
#include <GLFW/glfw3.h>
#include <stdio.h>
#include <iostream>
#include "jelly/lua_manager.h"
#include "jelly/keysManager.h"
jelly::keys_buttons::KeysManager km;
GLuint vertex_array_obj;
GLuint program;
GLuint startRender(GLFWwindow* window)
{
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
std::cout << "ASD" << std::endl;
static const GLchar * fragmentShader_src[] =
{
"#version 430 core \n"
" \n"
"void main(void) \n"
"{ \n"
" gl_Position = vec4(0, 0.5, 0.0, 1); \n"
"} \n"
};
static const GLchar * vertexShader_src[] =
{
"#version 430 core \n"
" \n"
"out vec4 color; \n"
" \n"
"void main(void) \n"
"{ \n"
" color = vec4(0.0, 0.8, 1.0, 1.0); \n"
"} \n"
};
glShaderSource(vertexShader, 1, vertexShader_src, NULL);
glCompileShader(vertexShader);
glShaderSource(fragmentShader, 1, fragmentShader_src, NULL);
glCompileShader(fragmentShader);
GLuint tprogram = glCreateProgram();
glAttachShader(tprogram, vertexShader);
glAttachShader(tprogram, fragmentShader);
glLinkProgram(tprogram);
glValidateProgram(tprogram);
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
glGenVertexArrays(1, &vertex_array_obj);
glBindVertexArray(vertex_array_obj);
return tprogram;
}
void render(GLFWwindow* window)
{
glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_POINTS, 0, 1);
glPointSize(40.0f);
}
void mouseCallback(GLFWwindow* window, int button, int action, int mods)
{
km.mouseClick(button, action, mods);
}
void keyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
km.keyPressed(key, action, mods);
}
int main()
{
jelly::lua::LuaManager lm;
// 0 = Build | 1 = Release | 2 = Alpha | 3 = Beta
int buildType = 0;
std::string title = "Relieved";
if (buildType != 1)
{
switch (buildType) {
case 0 :
title += " | Build Version";
break;
case 2 :
title += " | Alpha Version";
break;
case 3 :
title += " | Beta Version";
break;
default :
break;
}
}
GLFWwindow* window;
if (!glfwInit()) {
glfwTerminate();
return -1;
}
window = glfwCreateWindow(640, 400, title.c_str(), NULL, NULL);
if (!window) {
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glewExperimental = GL_TRUE;
glewInit ();
program = startRender(window);
glUseProgram(program);
glfwSetKeyCallback(window, keyCallback);
glfwSetMouseButtonCallback(window, mouseCallback);
while(!glfwWindowShouldClose(window))
{
render(window);
glfwSwapBuffers(window);
glfwPollEvents();
}
glDeleteVertexArrays(1, &vertex_array_obj);
glDeleteProgram(program);
glDeleteVertexArrays(1, &vertex_array_obj);
glfwTerminate();
return 0;
}