- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我链接了 opengl32、glew32 和 glfw3。在运行应用程序之前一切都很好。我首先启动了 glfw,接下来我创建了上下文并启动了 glew。没有错误。问题仅在我尝试使用 glBindBuffer 等 OpenGL 3.2 函数时出现,出现段错误,但地址已设置,有人可以帮助我吗?
// *** ADDED BY HEADER FIXUP ***
#include <cstdio>
#include <cstdlib>
#include <iostream>
// *** END ***
#include <GLFW/glfw3.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
//////////////////////////////////////////////////////////////////////
// (c) Janusz Ganczarski
// http://www.januszg.hg.pl
// JanuszG@enter.net.pl
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// identyfikator obiektu programu
//////////////////////////////////////////////////////////////////////
GLuint program;
//////////////////////////////////////////////////////////////////////
// identyfikator obiektu bufora z danymi tablicy
// wierzchołków - współrzędnymi wierzchołków kwadratu
//////////////////////////////////////////////////////////////////////
GLuint vertexBuffer;
//////////////////////////////////////////////////////////////////////
// identyfikator obiektu tablic wierzchołków
//////////////////////////////////////////////////////////////////////
GLuint vertexArray;
//////////////////////////////////////////////////////////////////////
// współrzędne wierzchołków trójkątów składających się na kwadrat
//////////////////////////////////////////////////////////////////////
GLfloat position[2 * 3 * 2] = {
-0.5f, -0.5f,
0.5f, -0.5f,
0.5f, 0.5f,
-0.5f, -0.5f,
0.5f, 0.5f,
-0.5f, 0.5f
};
//////////////////////////////////////////////////////////////////////
// funkcja generująca scenę 3D
//////////////////////////////////////////////////////////////////////
void DisplayScene()
{
// czyszczenie bufora koloru
glClear ( GL_COLOR_BUFFER_BIT );
// włączenie obiektu tablic wierzchołków
glBindVertexArray ( vertexArray );
// włączenie shadera
//glUseProgram( program );
// narysowanie danych zawartych w tablicach wierzchołków
glDrawArrays ( GL_TRIANGLES, 0, 2 * 3 );
// wyłączenie shadera
glUseProgram ( 0 );
// wyłączenie obiektu tablic wierzchołków
glBindVertexArray ( 0 );
}
//////////////////////////////////////////////////////////////////////
// zmiana wielkości okna
//////////////////////////////////////////////////////////////////////
void Reshape ( int width, int height )
{
// obszar renderingu - całe okno
glViewport ( 0, 0, width, height );
}
//////////////////////////////////////////////////////////////////////
// inicjalizacja stałych elementów maszyny stanu OpenGL
//////////////////////////////////////////////////////////////////////
void InitScene()
{
// kolor tła - zawartość bufora koloru
glClearColor ( 1.0f, 1.0f, 1.0f, 1.0f );
// wczytanie shaderów i przygotowanie obsługi programu
//AttachVertexShader( program, "kwadrat_vs.glsl" );
//AttachFragmentShader( program, "kwadrat_fs.glsl" );
// konsolidacja programu
//LinkProgram( program );
// generowania identyfikatora obiektu tablic wierzchołków
glGenVertexArrays ( 1, &vertexArray );
// utworzenie obiektu tablic wierzchołków
glBindVertexArray ( vertexArray );
// generowanie identyfikatora obiektu bufora
glGenBuffers ( 1, &vertexBuffer );
// utworzenie obiektu bufora wierzchołków (VBO)
glBindBuffer ( GL_ARRAY_BUFFER, vertexBuffer );
// załadowanie danych obiektu bufora wierzchołków
glBufferData ( GL_ARRAY_BUFFER, sizeof ( position ), position, GL_STATIC_DRAW );
// pobranie indeksu atrybutu wierzchołka o nazwie "inPosition"
// GLuint positionLoc = glGetAttribLocation( program, "inPosition" );
// zdefiniowanie tablicy wierzchołków
// glVertexAttribPointer( positionLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL );
// włączenie tablic wierzchołków
// glEnableVertexAttribArray( positionLoc );
// wyłączenie obiektu tablic wierzchołków
glBindVertexArray ( 0 );
}
//////////////////////////////////////////////////////////////////////
// usunięcie obiektów OpenGL
//////////////////////////////////////////////////////////////////////
void DeleteScene()
{
// usunięcie obiektu programu
glDeleteProgram ( program );
// usunięcie obiektu bufora wierzchołków
glDeleteBuffers ( 1, &vertexBuffer );
// usunięcie obiektu tablic wierzchołków
glDeleteVertexArrays ( 1, &vertexArray );
}
static void error_callback ( int error, const char* description )
{
fputs ( description, stderr );
}
static void key_callback ( GLFWwindow* window, int key, int scancode, int action, int mods )
{
if ( key == GLFW_KEY_ESCAPE && action == GLFW_PRESS ) {
glfwSetWindowShouldClose ( window, GL_TRUE );
}
}
int main ( void )
{
GLFWwindow* window;
glfwSetErrorCallback ( error_callback );
if ( !glfwInit() ) {
exit ( EXIT_FAILURE );
}
glfwWindowHint ( GLFW_CONTEXT_VERSION_MAJOR, 3 );
glfwWindowHint ( GLFW_CONTEXT_VERSION_MINOR, 2 );
glfwWindowHint ( GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE );
glfwWindowHint ( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE );
window = glfwCreateWindow ( 800, 600, "Simple example", NULL, NULL );
if ( !window ) {
glfwTerminate();
exit ( EXIT_FAILURE );
}
glfwMakeContextCurrent ( window );
GLenum err = glewInit();
if ( GLEW_OK != err ) {
exit ( 1 );
}
glfwSetKeyCallback ( window, key_callback );
InitScene();
while ( !glfwWindowShouldClose ( window ) ) {
int width, height;
glfwGetFramebufferSize ( window, &width, &height );
DisplayScene();
glfwSwapBuffers ( window );
glfwPollEvents();
}
glfwDestroyWindow ( window );
glfwTerminate();
exit ( EXIT_SUCCESS );
}
最佳答案
尝试做
glewExperimental = GL_TRUE;
在调用 glewInit() 之前。否则,当您从顶点数组绘制时它会崩溃。
关于c++ - GLFW3 & GLEW 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17928150/
使用glew,我正在尝试链接简单的程序 #include int main (int argc, const char * argv[]) { glewInit(); return
我有一个动态库,在构建中包含glew.c,并使用GLEW_STATIC 构建。如果另一个库链接到同一个应用程序并且还以某种方式包含 GLEW,是否有可能由于单一定义规则而导致 Linux 出现问题?
我在 Macintosh 上使用终端。 要编译的命令是基本的: g++ -c String.cpp -o String.o g++ -c FileIO.cpp -o FileIO.o g++ -c
我正在配置一个与 glut 一起工作的程序来与 Qt 一起工作。我正在使用 Qt 5.1.1。并且似乎从 Qt4 到 Qt5 已经丢失了一些 openGL 功能。在我的程序中,我创建了一个 QOpen
我正在尝试做 openGLbook.com 教程。我收到这个常见错误: 1>------ Build started: Project: OpenGL Startup, Configurati
我读过这个 [1],但在我的例子中,CMake 说它找不到 glew。 我在 Windows 上,我的 CMake 模块文件夹中有一个 FindGLEW.cmake 文件,大概是在我安装 CMake-
这很奇怪。我想在我的 gl 程序中实现着色器。 但 GLEW 告诉我,我的系统不支持着色器: //glut init and glew init ... if (GLEW_ARB_vertex_sha
我想使用三角扇绘制不同的图形,但我不知道如何让程序绘制第二个图形。每次我想更改颜色或绘制新图形时,是否需要第二个 vertexShaderSource 和第二个 fragmentShaderSourc
我现在对尝试链接这个 glew 库感到非常沮丧 这是构建日志: g++ -o test.exe "src\\test.o" -lglew32 -lglfw -lglu32 -lopengl32 src
当我尝试在 CLion 中构建我的项目时,我遇到了来自 cmake 的链接错误。我已经尝试过其他线程所说的:将 opengl 放在最后,将 glu 放在第一位,更改我的 include 的顺序并设置
我遇到了这个问题,不知道该怎么办? 'abc.exe': Loaded 'D:\Windows\SysWOW64\nvoglv32.dll', Cannot find or open the PDB
我只是想使用 SDL 2.0 和 glew 1.9 创建一个 openGL 上下文 构建项目时没有问题,但在调试时,GLEW 初始化失败,我该怎么做才能解决这个问题? 我正在使用 visual stu
我正在使用以下代码检查是否有任何错误: glfwInit(); glewExperimental = GL_TRUE; if (glewInit() != 0) { std::cout <<
不知何故,我无法在多个头文件中获取 Glew。它只是提示 Gl 已经在 GLEW 之前定义了。 简而言之,我有以下文件结构: 程序.h 包括: , 和 "SceneManager.h" . 场景管理器
我的机器有 OpenGL 2.0,由于一些奇怪的原因,头文件 gl.h 不包含着色器函数。所以,有人建议我使用 GLEW。我正确安装了 GLEW,并将 glew32s 链接到我的编译器,我还在我的 m
我需要在 Ubuntu 11.10 中加载扩展。我尝试构建 GLEW,但出现以下奇怪错误... ~/Downloads/glew-1.7.0$ make cc -shared -Wl,-soname=
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我试图通过将源文件添加到我的项目来跳过 glew 的“链接步骤”,以使代码更加灵活(目标 32 位和 64 位,只需稍作修改)。我已经使用 Code::Blocks 和 mingw 32 位实现了 3
出于我无法理解的原因,glew 在静态链接时根本不起作用。有没有一种方法可以简单地将 glew.h、glxew.h、wglew.h 和 glew.c 源文件包含到我的项目中并使用 #include "
我编译了 GLEW 库。它似乎工作正常,这里是 make install 的输出: install -d -m 0755 "/usr/include/GL" install -m 0644 inclu
我是一名优秀的程序员,十分优秀!