标签: glew

OpenGL非常特定于机器

最近我开始在C++中使用OpenGL进行一些3D渲染,但奇怪的是它似乎只适用于几台机器.我正在使用OpenGL 3.0或更高版本(目前设置为3.0)使用顶点数组对象(不确定它是如何被调用的,但API修订版删除了glBegin,glEnd等).

在另一台机器上测试之前,我总是要求他们的GPU驱动程序,大多数都支持OpenGL 4.2,如果没有,我确保它们至少支持3.0.然而在某些机器上我的应用程序只是崩溃,或者没有渲染任何东西,OpenGL不会抛出任何错误(我每帧至少检查一次错误).虽然它在我自己的机器上工作得很好,但在某些情况下,我的机器甚至比某些机器上的机器还要老.

我开始只使用OpenGL本身和GLEW,但为了易于使用和我喜欢的其他一些功能切换到SFML和GLEW,OpenGL本身并没有改变它的行为.我确实重写了我正在处理的引擎来封装所有GL调用并合并顶点数组对象和其他一些功能,实际上我可以给你一个应用程序使用的所有API调用的列表.显然它并没有在测试应用程序中使用它们,但这些都是我在引擎中使用的所有调用(这是最小的能够渲染,所以是的,引擎甚至没有接近完成):

  • glAttachShader
  • glBindAttribLocation
  • glBindBuffer
  • glBindVertexArray
  • glBufferData
  • glBufferSubData
  • glClear
  • glClearColor
  • glClearDepth
  • glCompileShader
  • glCreateProgram
  • glCreateShader
  • glCullFace
  • glDeleteBuffers
  • glDeleteProgram
  • glDeleteShader
  • glDeleteVertexArrays
  • glDepthFunc
  • glDepthMask
  • glDepthRange
  • glDisableVertexAttribArray
  • glDrawElements
  • glEnable
  • glEnableVertexAttribArray
  • glFrontFace
  • glGenBuffers
  • glGenVertexArrays
  • glGetAttribLocation
  • glGetBufferParameteriv
  • glGetBufferSubData
  • glGetError
  • glGetIntegerv
  • glGetProgramInfoLog
  • glGetProgramiv
  • glGetShaderInfoLog
  • glGetShaderiv
  • glGetShaderSource
  • glGetUniformLocation
  • glIsProgram
  • glIsShader
  • glLinkProgram
  • glMapBufferRange
  • glPixelStorei
  • glShaderSource
  • glUniform(1i,1ui,1f,2f,3f,4f,Matrix3fv,Matrix4fv)
  • glUnmapBuffer
  • glUseProgram
  • glVertexAttrib(1i,1ui,1f,2f,3f,4f)
  • glVertexAttribPointer

简而言之,Shader和ShaderProgram部分没有什么特别之处,我有一些方法可以创建/编译它们,事先设置一些属性位置,最后设置属性/制服.缓冲区对象也没有什么特别之处,你可以编写,读取和映射缓冲区,目前我只使用GL_ARRAY_BUFFER和GL_ELEMENT_ARRAY_BUFFER.最后我使用顶点数组对象实际渲染对象,显然我设置了属性指针,封装了绘制调用和程序用法,它总是使用索引绘图.

此外,我广泛搜索谷歌和堆栈溢出本身的答案.但是所有问题都与OpenGL无法在任何地方工作有关,例如,某些API调用未按顺序调用或根本不调用.遗憾的是,这些答案都不适用于我,它一直在我自己的机器和我可以直接访问的其他机器上工作,但是当我将应用程序发送给其他人在他们的机器上进行测试时,它从未起作用.

希望这是特定的XD

编辑,从下面的帖子复制

每个测试都在windows vista或7上完成.我已经对每个API调用进行了OpenGL错误检查,似乎没有任何错误.我无法在自己的机器上重现它,但在其他机器上进行了一些跟踪后,我发现它不会崩溃直到渲染.设置工作正常,它可以很好地创建所有缓冲区和对象,但是一旦我尝试渲染网格(VAO),它就会崩溃而没有任何错误(除了.exe已停止工作).我怀疑glUseProgram或glDrawElements命令

关于一个例子,除非你想搜索大约10个类,否则我不能给你一个简短的例子

编辑,渲染对象的微小代码

Mesh类将这些结构添加到对象中,因此它知道要绘制的内容:

// Define Geometry (draw command)
struct Geometry
{
    // Primitives
    PrimitiveType primitiveType;

    // Indices
    IndexType …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glew render sfml

8
推荐指数
1
解决办法
814
查看次数

OpenGL/glew未解析的外部符号

我遇到了glew和链接器错误的问题.我有:

  1. 将glew32.dll和glew32d.dll放在system,System32和SysWOW64中
  2. 把glew.h放在GL文件夹中
  3. 把glew32.lib,glew32d.lib,glew32s.lib放在Lib文件夹中
  4. 在附加依赖项中加入glew32.lib,glew32d.lib,glew32s.lib,glut32.lib,opengl32.lib
  5. 将GLEW_STATIC放在预处理器定义中

但是,我仍然收到以下错误:

1>project2.obj : error LNK2001: unresolved external symbol ___glewGetProgramInfoLog
1>project2.obj : error LNK2001: unresolved external symbol ___glewGetShaderInfoLog
1>project2.obj : error LNK2001: unresolved external symbol ___glewGetProgramiv
1>project2.obj : error LNK2001: unresolved external symbol ___glewGetShaderiv
1>project2.obj : error LNK2001: unresolved external symbol ___glewIsShader
1>project2.obj : error LNK2001: unresolved external symbol ___glewGetUniformLocation
1>project2.obj : error LNK2001: unresolved external symbol ___glewLinkProgram
1>project2.obj : error LNK2001: unresolved external symbol ___glewAttachShader
1>project2.obj : error LNK2001: unresolved external symbol ___glewCreateProgram
1>project2.obj …
Run Code Online (Sandbox Code Playgroud)

glew unresolved-external

8
推荐指数
1
解决办法
1645
查看次数

glewInit()失败,OpenGL应用程序

我正在尝试用glew/glfw构建一个OpenGL应用程序.我已经下载了二进制文件,将它们放在我的文件夹的根目录中,添加了include和lib目录的路径,并告诉我的项目需要glew32.lib,GLFW.lib和opengl32.lib.

我甚至将glew32.lib复制到根目录,因为我的项目无法看到它.

我必须保留项目目录中的所有依赖项,因为我将分发它.我不知所措.

现在,当我运行我的程序时,它在glewInit()失败

这是我到目前为止的实现:

#include "Common.h"

GameEngine::GameEngine()
{
    InitWithSize(1024, 768);
    InitInput();
}

void GameEngine::InitWithSize(int _width, int _height)
{
    try {
        // Initialise GLFW
        if( !glfwInit() )
            throw std::exception("Failed to initialize GLFW\n");

        //glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4);
        glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
        glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);
        glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

        // Open a window and create its OpenGL context
        if( !glfwOpenWindow( _width, _height, 0,0,0,0, 32,0, GLFW_WINDOW ) ) 
            throw std::exception("Failed to initialize GLFW\n");


        glfwSetWindowTitle( "Tutorial 01" );

        // Initialize GLEW
        if (glewInit() != GLEW_OK)
            throw std::exception("Failed to initialize GLEW\n");


    } …
Run Code Online (Sandbox Code Playgroud)

opengl glew

8
推荐指数
3
解决办法
3万
查看次数

如何在xcode中链接glew

我无法将glew与xcode联系起来.我的glew库位于/usr/local/lib/libGLEW.dylib中

当我在命令行中编译文件时:

g ++ /usr/local/lib/libGLEW.dylib -framework OpenGL main.cpp

但是当我在xcode中编译时,我得到错误:

找不到"GL/glew.h"文件

码:

#include <iostream>
#include <GL/glew.h>

int main(int argc, const char * argv[])
{
    // insert code here...
    std::cout << "Hello, World!\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我联系了glew和xcode

有截图

OS X 10.8.4,Xcode 4.6.1

c++ opengl macos xcode glew

8
推荐指数
1
解决办法
2万
查看次数

使用MinGW在Windows上构建GLEW 1.7.0

以前有很多问题:如何使用MinGW在Windows上编译GLEW 1.7.0源代码?目标是从c ++项目动态链接库.

更多信息:我正在使用QtCreator,ergo使用qmake进行构建.我在Windows 7上.到目前为止,我已经尝试/查看了以下链接.

使用发布的批处理文件也试图用g ++替换gcc

使用vc ++ libs构建静态,构建dll.a重用vc ++ .dll

获取MSYS运行makefile

关于初始问题的信息

使用GLEW msvc ++二进制文件的简单东西可以在我的桌面上运行

不幸的是,当我在项目中使用已编译的结果时,所有发布的解决方案都会在以下错误消息中结束:

undefined reference to `glDrawElements@16'
debug/Ex04.o: In function `Z6initGLv':
undefined reference to `glClearColor@16'
undefined reference to `glEnable@4'
debug/Ex04.o: In function `Z8updateGLv':
undefined reference to `glClear@4'
undefined reference to `glViewport@16'
collect2: ld returned 1 exit status
mingw32-make.exe[1]: *** [debug/ecg4.exe] Error 1
mingw32-make.exe: *** [debug] Error 2
Run Code Online (Sandbox Code Playgroud)

关于这个问题,我已经结束了.我已经对qmake和windows path变量中的LIBS路径进行了两次和三次检查,以包含glew dll所在的目录.qmake的INCLUDEPATH也应该没问题.这里是.pro文件中的路径:

LIBS += -L$$quote(C:/mypath/freeglut/lib/) -lfreeglut
LIBS += -L$$quote(C:/mypath/glew-1.7.0/lib/) -lglew32 -lglew32mx
#LIBS+= C:/mypath/glew-1.7.0/lib/libglew32.dll.a
#LIBS+= C:/Programming/glew-1.7.0/lib/libglew32mx.dll.a …
Run Code Online (Sandbox Code Playgroud)

glew mingw

7
推荐指数
1
解决办法
9186
查看次数

在VIsual studio 2010 express中使用GLEW,SDL和OpenGL的未解析的外部符号

我正在使用这个 OpenGL教程.我使用SDL来创建窗口,现在我需要使用glew(请参阅本教程底部的另外一个部分).但无论我链接,包括,复制或定义所有我得到的是未解决的外部符号错误.

我有:

  • 将我的项目链接到GLEW Lib文件夹
  • 在我的包含路径中添加了include文件夹
  • 将include,bin和lib文件复制到适当的映射中的C:\ Program Files(x86)\ Microsoft SDKs\Windows\v7.0A \
  • 将glew32.dll和glew32mx.dll复制到我的system32文件夹
  • 包含和定义不同的文件(见截图2)

我会让截图进行说话,我忘记了什么?

截图:

应该去这里,但由于新的用户规则,我不能在这里包括它们.这是一个链接

c++ opengl glew sdl

7
推荐指数
1
解决办法
2332
查看次数

freeglut中glutidlefunc()的重点是什么?

我得到了glutdisplayfunc()如何使显示循环和Iv在一些地方读取你应该把游戏机制放在glutidle而不是显示; 为什么你不能把它们放在一段时间(游戏运行)循环?

c++ opengl glew freeglut

7
推荐指数
1
解决办法
1万
查看次数

在QT中使用glew解析OpenGL函数

已经17天了,我正在努力使用QT在OpenGL中编写一个简单的程序,但在Google上搜索的所有教程都失败了.我使用msvc2010使用-opengl桌面编译了我的QT 5.0.1以使桌面opengl默认.

我读过Sean Harmer的教程,但它依赖于QT来解决opengl函数.

据一些人说,在QT中不可能使用glew,因为QT内置的库可以防止glew包含它的标题,但根据Sean Harmer HERE,它是可能的(但是没有解释如何).

即使使用QGLWidget,我也无法使用OpenGL扩展.

现在我想要的是将所有OpenGL函数分开使用,并将QT中的所有窗口函数分开,即QT对OpenGL没有干扰.

如果有人用简单的三角形示例解释我的程序并使用任何扩展名,我会非常感激...

我在我的项目中使用了glew库,并且在我的程序开始时使用了#include glew.h,但是在编译时它给出了错误:glwidget.obj:-1:错误:LNK2001:未解析的外部符号imp_ _glewGenVertexArrays

我的简历

QT       += core gui opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Trial
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp \
    glwidget.cpp

HEADERS  += mainwindow.h \
    glwidget.h

FORMS    += mainwindow.ui

RESOURCES += \
    resources.qrc
win32: LIBS += -L$$PWD/../../../../../OpenGL/glew-1.9.0/lib/ -lglew32s

INCLUDEPATH += $$PWD/../../../../../OpenGL/glew-1.9.0/include
DEPENDPATH += $$PWD/../../../../../OpenGL/glew-1.9.0/include

win32: PRE_TARGETDEPS += $$PWD/../../../../../OpenGL/glew-1.9.0/lib/glew32s.lib
Run Code Online (Sandbox Code Playgroud)

通过glewInfo输出:GLEW版本1.9.0 pixelformat的报告功能1在NVIDIA公司的GeForce GT 540M/PCIe/SSE2上运行支持OpenGL版本4.3.0

void GLWidget::initializeGL()
{
    GLenum err = glewInit();
    if(err != GLEW_OK) …
Run Code Online (Sandbox Code Playgroud)

opengl qt glew

7
推荐指数
1
解决办法
1万
查看次数

Mac - OpenGL - 未找到 glew

基本上我试图弄清楚为什么编译器抱怨缺少 glew-library:

fatal error: 'GL/glew.h' file not found
Run Code Online (Sandbox Code Playgroud)

我的设置:

酿造清单:

glew
glfw
glm
Run Code Online (Sandbox Code Playgroud)

在 /usr/local/include 目录中:

GL -> ../Cellar/glew/2.0.0/include/GL
GLFW -> ../Cellar/glfw/3.2.1/include/GLFW
glm -> ../Cellar/glm/0.9.8.3/include/glm
Run Code Online (Sandbox Code Playgroud)

和生成文件:

# OBJS specifies which files to compile as part of the project
OBJS = *.cpp

# CC specifies which compiler we're using
CC = g++

# INCLUDE_PATHS specifies the additional include paths we'll need
INCLUDE_PATHS = -I/usr/local/include -I/opt/X11/include

# LIBRARY_PATHS specifies the additional library paths we'll need
LIBRARY_PATHS = -L/usr/local/lib -I/opt/X11/lib

# COMPILER_FLAGS specifies …
Run Code Online (Sandbox Code Playgroud)

opengl glew makefile glfw glm-math

6
推荐指数
1
解决办法
1万
查看次数

使用 GLEW 进行 CMake find_package

我正在尝试为使用 GLEW 的项目设置一个 CMakeLists.txt 文件。我一直这样做:

find_path(GLEW_INCLUDE_DIR GL/glew.h)  

find_library(GLEW_LIBRARY_RELEASE glew32)
find_library(GLEW_LIBRARY_DEBUG glew32d)

target_include_directories(${APP_NAME} PUBLIC ${GLEW_INCLUDE_DIR}) 

target_link_libraries(${APP_NAME} optimized ${GLEW_LIBRARY_RELEASE}
                                  debug ${GLEW_LIBRARY_DEBUG})
Run Code Online (Sandbox Code Playgroud)

这种方法有效,但我想使用 find_package 方法,因为我认为它更好。

我在这个网站上找到了一些示例,例如:Adding GLEW to project (CMake),建议执行如下操作:

find_package(GLEW REQUIRED)
target_link_libraries(${APP_NAME} GLEW::GLEW)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这样做时,它在配置阶段会产生错误:

CMake Error at C:/libs/glew-2.1.0/build/cmake/glew-config.cmake:16 (include):
include could not find load file:

C:/libs/glew-2.1.0/build/cmake/glew-targets.cmake
Call Stack (most recent call first):
C:/Program Files/CMake/share/cmake-3.15/Modules/FindGLEW.cmake:62 (find_package)
CMakeLists.txt:14 (find_package)


CMake Error at C:/libs/glew-2.1.0/build/cmake/CopyImportedTargetProperties.cmake:64 (get_property):
get_property could not find TARGET GLEW::glew.  Perhaps it has not yet been
created.
Call Stack (most recent call …
Run Code Online (Sandbox Code Playgroud)

c++ glew cmake

6
推荐指数
1
解决办法
2302
查看次数

标签 统计

glew ×10

opengl ×7

c++ ×5

cmake ×1

freeglut ×1

glfw ×1

glm-math ×1

macos ×1

makefile ×1

mingw ×1

qt ×1

render ×1

sdl ×1

sfml ×1

unresolved-external ×1

xcode ×1