最近我开始在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调用的列表.显然它并没有在测试应用程序中使用它们,但这些都是我在引擎中使用的所有调用(这是最小的能够渲染,所以是的,引擎甚至没有接近完成):
简而言之,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) 我遇到了glew和链接器错误的问题.我有:
但是,我仍然收到以下错误:
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/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) 我无法将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
以前有很多问题:如何使用MinGW在Windows上编译GLEW 1.7.0源代码?目标是从c ++项目动态链接库.
更多信息:我正在使用QtCreator,ergo使用qmake进行构建.我在Windows 7上.到目前为止,我已经尝试/查看了以下链接.
使用vc ++ libs构建静态,构建dll.a重用vc ++ .dll
使用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) 我正在使用这个 OpenGL教程.我使用SDL来创建窗口,现在我需要使用glew(请参阅本教程底部的另外一个部分).但无论我链接,包括,复制或定义所有我得到的是未解决的外部符号错误.
我有:
我会让截图进行说话,我忘记了什么?
截图:
应该去这里,但由于新的用户规则,我不能在这里包括它们.这是一个链接
我得到了glutdisplayfunc()如何使显示循环和Iv在一些地方读取你应该把游戏机制放在glutidle而不是显示; 为什么你不能把它们放在一段时间(游戏运行)循环?
已经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) 基本上我试图弄清楚为什么编译器抱怨缺少 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) 我正在尝试为使用 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)