glfw 相关问题

GLFW是一个免费的开源多平台库,用于打开窗口,创建OpenGL上下文和管理输入。它很容易集成到现有的应用程序中,并没有声称主循环。 GLFW是用C语言编写的,并且对Windows,Mac OS X以及使用X Window系统的许多类Unix系统(例如Linux和FreeBSD)提供原生支持。 GLFW根据zlib / libpng许可证授权。

pyOpenGL测试程序:验证失败:没有顶点数组对象绑定消息

我正在尝试使用python,OpenGl(pyopengl)和着色器(MacOS),并且收到以下奇怪消息:OpenGL.GL.shaders.ShaderValidationError:验证失败(0):b'Validation Failed:否...

回答 1 投票 1

我如何确定此内存更改/损坏的根源?

我目前正在开发一个Vulkan程序,我希望将其用作游戏引擎,但距离目标还很遥远。第一步,我只是尝试使用动态列表来渲染三角形...

回答 1 投票 0

OpenGL绘制一个三角形而不是正方形

我对OpenGL非常陌生,我正在尝试在屏幕上显示一个正方形。该代码应绘制一个正方形,但是省略最后一个顶点,仅绘制一个三角形。我哪里出问题了? #include&...

回答 1 投票 0

多个对象无法渲染?

我应该在屏幕上显示两个正方形,但是当我运行它时,我看到的只是一个虚无的屏幕。 #include #include #include #include ]]]] 各种种类的wonk-a-donk: Parseshader()如果第一行以魔术#shader指令以外的其他内容开头,则会中断,因为NONE设置为5,并且ss[(int)type]索引+赋值将直接从3元素的结尾移出ss数组。将NONE下拉至2。 您在着色器(0)中只有一个顶点属性,但您正在尝试设置1。 这不是VAO的工作方式完全 。 VAO never 是glBindBuffer()的有效参数。集成,绑定VAO,然后设置顶点属性绑定/布局: unsigned int vao1 = 0; glGenVertexArrays(1, &vao1); glBindVertexArray(vao1); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); glBindBuffer(GL_ARRAY_BUFFER, buffer1); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0); glEnableVertexAttribArray(0); 然后稍后当您要绘制时,您可以重新绑定VAO并立即绘制,跳过所有glBindBuffer() /glVertexAttribPointer()/ glEnableVertexAttribArray()设置。 全部: // g++ -g main.cpp `pkg-config --cflags --libs glfw3 glew` #include <GL/glew.h> #include <GLFW/glfw3.h> #include <iostream> #include <sstream> #include <string> const char* const shaderSource = R"GLSL( #shader vertex #version 330 core layout(location = 0) in vec3 position; void main() { gl_Position = vec4(position.x, position.y, position.z, 1.0); }; #shader fragment #version 330 core layout(location = 0) out vec4 color; uniform vec4 Color_u; void main() { color = Color_u; }; )GLSL"; struct Shaderprogramsource { std::string VertexSouce; std::string FragmentSource; }; static Shaderprogramsource Parseshader(const std::string& shaderString) { std::stringstream stream( shaderString ); enum class Shadertype { VERTEX = 0, FRAGMENT = 1, NONE = 2 }; std::string line; std::stringstream ss[3]; Shadertype type = Shadertype::NONE; while( std::getline(stream, line) ) { if (line.find("#shader") != std::string::npos) { if (line.find("vertex") != std::string::npos) type = Shadertype::VERTEX; else if (line.find("fragment") != std::string::npos) type = Shadertype::FRAGMENT; } else { ss[(int)type] << line << '\n'; } } return Shaderprogramsource{ ss[0].str(), ss[1].str() }; } static int CompileShader(unsigned int type, const std::string& Source) { unsigned int id = glCreateShader(type); const char* src = Source.c_str(); glShaderSource(id, 1, &src, nullptr); glCompileShader(id); int result; glGetShaderiv(id, GL_COMPILE_STATUS, &result); if (result == GL_FALSE) { int length; glGetShaderiv(id, GL_INFO_LOG_LENGTH, &length); char* message = (char*)alloca(length * sizeof(char)); glGetShaderInfoLog(id, length, &length, message); std::cout << message; return 0; } return id; } static unsigned int CreateShader( const std::string& Vertexshader, const std::string& Fragmentshader ) { unsigned int program = glCreateProgram(); unsigned int vertex = CompileShader(GL_VERTEX_SHADER, Vertexshader); unsigned int fragment = CompileShader(GL_FRAGMENT_SHADER, Fragmentshader); glAttachShader(program, vertex); glAttachShader(program, fragment); glLinkProgram(program); glValidateProgram(program); return program; } int main( int argc, char** argv ) { if (!glfwInit()) return -1; glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); GLFWwindow* window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); if (!window) { glfwTerminate(); return -1; } /* Make the window's context current */ glfwMakeContextCurrent(window); if (GLEW_OK == glewInit()) { } unsigned int buffer1; glGenBuffers(1, &buffer1); glBindBuffer(GL_ARRAY_BUFFER, buffer1); float vertices1[] = { -0.1, -0.1, 0.1, -0.1, 0.1, 0.1, -0.1, 0.1, }; glBufferData(GL_ARRAY_BUFFER, sizeof(vertices1), vertices1, GL_STATIC_DRAW); unsigned int buffer2; glGenBuffers(1, &buffer2); glBindBuffer(GL_ARRAY_BUFFER, buffer2); float vertices2[] = { -0.1, 0.1, 0.1, 0.1, 0.1, 0.3, -0.1, 0.3, }; glBufferData(GL_ARRAY_BUFFER, sizeof(vertices2), vertices2, GL_STATIC_DRAW); unsigned int ebo; glGenBuffers(1, &ebo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); unsigned int indices[] = { 0, 1, 2, 2, 3, 0, }; glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); unsigned int vao1 = 0; glGenVertexArrays(1, &vao1); glBindVertexArray(vao1); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); glBindBuffer(GL_ARRAY_BUFFER, buffer1); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0); glEnableVertexAttribArray(0); unsigned int vao2 = 0; glGenVertexArrays(1, &vao2); glBindVertexArray(vao2); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); glBindBuffer(GL_ARRAY_BUFFER, buffer2); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0); glEnableVertexAttribArray(0); Shaderprogramsource source = Parseshader( shaderSource ); unsigned int shader = CreateShader(source.VertexSouce, source.FragmentSource); glUseProgram(shader); int location = glGetUniformLocation(shader, "Color_u"); /* Loop until the user closes the window */ while (!glfwWindowShouldClose(window)) { glfwPollEvents(); glClear(GL_COLOR_BUFFER_BIT); glUseProgram(shader); if (location > -1) { glUniform4f(location, 0.8f, 0.0f, 0.0f, 1.0f); } glBindVertexArray(vao1); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, nullptr); if (location > -1) { glUniform4f(location, 0.0f, 0.8f, 0.0f, 1.0f); } glBindVertexArray(vao2); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, nullptr); glfwSwapBuffers(window); } glDeleteProgram(shader); glfwTerminate(); return 0; } These are my shaders. #shader vertex #version 330 core layout(location = 0) in vec3 position; void main() { gl_Position = vec4(position.x, position.y, position.z, 1.0); }; #shader fragment #version 330 core layout(location = 0) out vec4 color; uniform vec4 Color_u; void main() { color = Color_u; };

回答 2 投票 1

使用openGL创建一个简单的2D库

我想用openGL创建一个“简单”的2D库。我想使用openGL,因为我知道我会学到很多东西,这就是为什么我不想使用更高级别的库(例如SDL)的原因。我知道那里...

回答 1 投票 0

为什么glDrawElements调用失败?

我正在尝试整合来自https://gamedev.stackexchange.com/questions/10727/fastest-way-to-draw-quads-in-opengl-es的建议以及如何使用中的顶点数组对象和glDrawElements ...

回答 1 投票 0

OpenGL Batch Renderer中的纹理出血/损坏[重复]

使用C ++引擎工作,并基于Cherno的视频系列实现了批处理渲染器。似乎工作了一段时间。最近注意到,在...上工作的两台计算机中的一台...

回答 1 投票 0

您必须在OpenGL程序中调用glfwSwapInterval(1)吗?

我运行了两次程序。第一次使用glfwSwapInterval(1),一切都很好。第二次没有glfwSwapInterval(1),它正在使用100%的CPU。我的问题:这正常吗?

回答 1 投票 0

无法使用Visual Studio生成CMake文件

我正在尝试将CMake与Visual Studio一起用于3D类,但是每当我打开提供的CMake项目时,Visual Studio都无法生成CMake文件。我收到以下错误(输出的某些部分...

回答 1 投票 1

在0x00E3CC4F引发异常:0xC0000005:访问冲突读取位置0x000002A4

#include“ libs.h” int main(){//初始化const int WIDTH = 640; const int HEIGHT = 480; int frameBufferWidth = 0; int frameBufferHeight = 0; // .. GLFWwindow * window = ...

回答 1 投票 0

glpointsize()无法缩小点

我正在尝试编写一个简单的opengl程序,该程序使用glPointSize()和变量pointSize周期性地在屏幕中心周期性地增大和缩小单个点。打印pointSize的值...

回答 1 投票 2

LWJGL 3鼠标移动

我想在我的lwjgl3 Java应用程序中实现FPS样式的鼠标外观,但是由于没有Mouse.getDX()或Mouse.getDY(),因此我正在寻找使用glfw绑定的其他方法。我...

回答 3 投票 3

尝试通过Ubuntu上的CLion将GLFW从源链接到c ++上的项目时出错

我正在尝试将GLFW从源代码添加到我的项目中。我按照文档中的说明进行操作,但出现错误。错误:/ usr / bin / ld:CMakeFiles / mancala_graphics.dir / main.cpp.o:在函数“ main”中:/ ...

回答 1 投票 0

对于OpenGL片段着色器,UV y通道始终为零

我主要根据此处的教程编写C ++程序(此处是GitHub的链接)。在教程6和7之间,UV.y坐标不再提供有意义的值。始终为0。对于...

回答 1 投票 -1

glfw获取显示器的宽度/高度

我是OpenGL的新手,尤其是glfw,想知道是否有可能检索首选监视器的宽度/高度(在C / C ++中吗?例如像这样:unsigned int width = glfwGetMonitorWidth(),...

回答 1 投票 0

在OpenGL中不渲染三角形

我刚刚开始学习OpenGL,但遇到了麻烦:三角形没有渲染。我知道OpenGL在提供错误方面不是很好,但是经过几个小时的尝试后才发现错误,...

回答 1 投票 0

OpenGL中的第三三角形顶点在窗口中渲染时显示为0.0

[因此,我最近一直在尝试通过这些视频来学习OpenGL(https://www.youtube.com/playlist?list=PLlrATfBNZ98foTJPJ_Ev03o2oq3-GGOS2)。但是当我尝试使用现代OpenGL运行程序时...

回答 1 投票 1

GLFW 3:如何使用ScrollCallback(LWJGL 3)获取鼠标滚轮的增量

我正在学习有关使用LWJGL和OpenGL进行3D游戏开发的教程。在本系列中,讲师正在使用LWJGL 2,而我正在将LWJGL 3与GLFW一起使用。并且在特定部分中,他使用LWJGL'...

回答 1 投票 0

GLFWKeyCallback想要实现close(),回调,getSignature,即使我只需要实现invoke();

我目前正在尝试使GLFWKeyCallback正常工作。我看过一些资料,他们都说这是实现它的方法。 GLFWKeyCallback键盘=新的GLFWKeyCallback(){@ ...

回答 1 投票 0

OpenGL:glGetError()是否未重置其标志?

我正在尝试使用glGetError()调试代码,但我注意到每次调用它都会引发错误1282。最终,我连续两行调用glGetError(),两者都给出了错误1282。不应该...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.