标签: glew

使用glew和glfw的opengl的cmake标志

我有这个简单的代码:

#include <stdio.h>
#include <stdlib.h>

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

int main(int argc, char const* argv[] )
{
    if( !glfwInit() ){
        fprintf( stderr, "failed\n" );
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的CmakeLists.txt中:

PROJECT(test C)
find_package(OpenGL)
ADD_DEFINITIONS(
    -std=c99
    -lGL
    -lGLU
    -lGLEW
    -lglfw
)
SET(SRC test)
ADD_EXECUTABLE(test ${SRC})
Run Code Online (Sandbox Code Playgroud)

跑"cmake".不会产生任何错误,但运行make会说:

test.c:(.text+0x10): undefined reference to `glfwInit'
collect2: ld returned 1 exit status
make[2]: *** [tut1] Error 1
Run Code Online (Sandbox Code Playgroud)

在跑步的时候:

gcc -o test test.c -std=c99 -lGL -lGLU -lGLEW -lglfw
Run Code Online (Sandbox Code Playgroud)

成功编译代码没有错误.如何使用我的代码运行cmake?

另外,如果我将这些行添加到main函数:

glfwOpenWindowHint( GLFW_FSAA_SAMPLES, 4 );
glfwOpenWindowHint( GLFW_OPENGL_VERSION_MAJOR, 3 ); …
Run Code Online (Sandbox Code Playgroud)

opengl glew cmake glfw

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

无法部署GLFW 3.2

所以这个是doozie;
我有一个非常大的OpenGL解决方案,在Windows 7中使用GLSL 1.5编写的3.2版本核心.我使用GLEW和GLM作为帮助库.当我创建一个窗口时,我使用以下行:

// Initialize main window
glewExperimental = GL_TRUE;
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); // Use OpenGL Core v3.2
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
if(!glfwOpenWindow(Game::WINDOW_X, Game::WINDOW_Y, 0, 0, 0, 0, 32, 0, GLFW_WINDOW))
{ ...
Run Code Online (Sandbox Code Playgroud)

如果我省略了三个glfwOpenWindowHint函数,应用程序在调用glDrawArrays(GL_TRIANGLES,0,m_numIndices)时会崩溃我的视频驱动程序;

但这是踢球者.当我的组中的其他人尝试更新并运行解决方案时,他们会得到一个没有几何体的空白窗口.注释掉这三行会使程序运行正常.使用3.2核心提示和不使用3.2核心提示之间存在相当分歧.我无法确定nVidia,AMD,台式机或笔记本电脑之间的任何差异.

我能找到的最好的建议是添加glewExperimental = GL_TRUE; 据说Glew有核心问题.它没有任何区别.解决方案太大而无法发布代码,但我可以根据需要设置着色器,渲染代码等.

非常感谢!这已经杀了我们好几天了.

c++ glew glfw opengl-3

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

无法将'LPCWSTR {aka const wchar_t*}'转换为'LPCSTR {aka const char*}

我一直在尝试让Glew和opengl 3.2在win32上下文中使用代码块(minGW).我在这里找到了一个不错的小教程

正如我一直试图解决的问题,如果在代码块中编译glew实际上是可行的,我想在完成教程之前尝试使用源代码来查看它是否可行.

在略微调整代码后,我尝试编译并得到了一些我以前从未见过的错误.他们如下

|In function 'bool createWindow(LPCWSTR, int, int)':|
|73|error: cannot convert 'LPCWSTR {aka const wchar_t*}' to 'LPCSTR {aka const char*}' in assignment|
|80|error: cannot convert 'LPCWSTR {aka const wchar_t*}' to 'LPCSTR {aka const char*}' for argument '2' to 'HWND__* CreateWindowExA(DWORD, LPCSTR, LPCSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID)'|
|In function 'int WinMain(HINSTANCE, HINSTANCE, LPSTR, int)':|
|105|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]|
|110|error: '_TRUNCATE' was not declared in this scope|
|110|error: …
Run Code Online (Sandbox Code Playgroud)

c++ winapi glew mingw codeblocks

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

Win8/VS2012:无法打开包含文件'GL/glew.h':没有这样的文件或目录

我正在尝试从Windows 7迁移到8,但是glew和freeglut给了我一些问题.

我使用的说明基本如下:

1)将Lib的内容和Include\GL文件夹的内容复制到Program Files\Microsoft SDKs\Windows\[最新版本] Lib和Include\GL文件夹

2)将freeglut.dll和glew的bin文件夹的内容复制到Windows\SysWOW64 \

这使用Windows 7/VS2010(Microsoft SDK中的文件夹是v7.0A)工作正常,但在Windows 8/VS2012上,我在构建我的解决方案时遇到以下错误:

error C1083: Cannot open include file: 'GL/glew.h': No such file or directory
Run Code Online (Sandbox Code Playgroud)

对于SDKs文件夹,在Windows 8上,最新版本是v8.0A,但是,我也尝试过使用v7.0A,获得相同的结果.但是,我注意到在Windows 7中,SDKs文件夹中有Lib和Include文件夹,但Windows 8文件夹却没有.不确定这是否重要.

有什么建议?

编辑:我用于安装的说明略微修改了这里的说明,修改是将dll复制到Windows的系统文件夹而不是每个项目输出(这似乎也没有帮助).

我正在开发的应用程序是用于大学课程,因此使用其他库可能是不可能的.

这些库的版本是2.8.0(freeglut)和1.9.0 32位(glew).

opengl glew freeglut visual-studio-2012

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

OpenGL扩展,如何在C和glsl中正确使用它们

我正在开发一款游戏引擎,它已经有了很大的发展.因为引擎也需要在mac上运行,我仍然使用OpenGL 3.2和GLSL 1.2 :-(.我使用GLEW,我认为它可以为我解决扩展问题.

编辑:同时,部分问题得到解答 - 请在下一次编辑时阅读:

我总是能够使着色器在windows和mac上工作,有时我必须在GLSL代码中添加一行,如#extension GL_EXT_gpu_shader4:enable使其在Mac上运行.看来我的Windows版本在编译同一个着色器时会发出警告,但它会起作用.

但自从我开始使用几何着色器以来,我的梦魇就开始了.出于某种原因,mac希望我使用#extension GL_EXT_gpu_shader4:enable而windows期望我使用#extension GL_EXT_geometry_shader4:enable.这使得创建独立于平台的着色器变得不那么明显.

而且,这更令人讨厌:Windows版本要我使用:glTransformFeedbackVaryings我认为GLEW会使它可用于mac但是我明确需要使用glTransformFeedbackVaryingsEXT,它不适用于Windows版本.所以我需要#ifdef让APPLE使用所需的东西.glBeginTransformFeedbackglBeginTransformFeedbackEXT也存在同样的问题.

但是都接受glProgramParameteriEXT,在那里我不需要干扰......

我明白,只有变换反馈,我才有问题,但......这是什么一回事?

我以为我理解OpenGL扩展如何工作,但我开始失去这种理解.

我认为当我在另一个Windows系统或另一个mac系统或另一个Linux系统上运行代码时,我会遇到新问题,因为有不同的图形适配器或其他东西.

任何人都可以帮我理解这个吗?我已阅读有关扩展的OpenGL手册,所以我遗漏了一些明显的东西.如何确保我的代码始终有效?

编辑:通过完全从Mac版本中删除GLEW并完全使用Mac自己的OpenGL 3.2实现,所有的命名都是正常的,我可以从我的着色器中完全删除#extension GL_EXT_gpu_shader4:enable.现在唯一让我担心的是,对于几何着色器,我需要函数glProgramParameteri,它似乎不存在,但是glProgramParameteriEXT.出于某种原因,此功能也适用于Windows.为什么?我可以确定它适用于所有系统/硬件吗?

c opengl glew glsl

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

opengl在渲染多个对象时闪烁

我对opengl很新,我真的不明白这里发生了什么.我正在尝试使用两个VAO来创建多个对象,并使用自定义矩阵来旋转/翻译它们.当我加载一个图像时图像很好,但是当我加载两个图像时它们都闪烁.我的init就是这样,我为每个缓冲区,顶点位置,顶点索引和顶点颜色设置了不同的数组.

void init()
{
 readFile();
 //glEnable(GL_DEPTH);
 glEnable( GL_DEPTH_TEST );
 //make background yerpul in colour
 glClearColor( 0.235,  0.194,  0.314, 1.0 );


    // Load shaders and use the resulting shader program
    program = InitShader( "aVertexShader61.glsl", "aFragShader61.glsl" );
    glUseProgram( program );

    // Create a vertex array object
    glGenVertexArrays( 1, &vao );
    glBindVertexArray( vao );

    // Create and initialize two buffer objects
    glGenBuffers( 2, buffers);

    //one buffer for the vertexPositions and colours
    glBindBuffer( GL_ARRAY_BUFFER, buffers[0]);
    glBufferData( GL_ARRAY_BUFFER, numVertexPositionBytes + numVertexColourBytes,NULL, GL_STATIC_DRAW );
    glBufferSubData( GL_ARRAY_BUFFER, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glew freeglut visual-studio-2010

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

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
查看次数

C++ OpenGL线框立方体渲染空白

我只想绘制一堆构成"立方体"的线条.我不能为我的生活弄清楚为什么这会产生黑屏.调试器不会在任何时候中断.

我确定这是我的指针的一个问题,因为我在普通的c ++和OpenGL中只对他们不太好,它变得更糟.

const char* vertexSource = 
    "#version 150\n"
    "in vec3 position;"
    "void main() {"
    "   gl_Position = vec4(position, 1.0);"
    "}";

const char* fragmentSource = 
    "#version 150\n"
    "out vec4 outColor;"
    "void main() {"
    "   outColor = vec4(1.0, 1.0, 1.0, 1.0);"
    "}";

int main() {

    initializeGLFW();

    // Initialize GLEW
    glewExperimental = GL_TRUE;
    glewInit();

    // Create Vertex Array Object
    GLuint vao;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);

    // Create a Vertex Buffer Object and copy the vertex data to it
    GLuint vbo;
    glGenBuffers( 1, &vbo …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glew pointers glfw

5
推荐指数
1
解决办法
2648
查看次数

如何将 ffmpeg 与 gltransition 集成?

我想用 GLTransition 过滤器构建 FFMPEG。我按照此链接中的构建说明进行操作

我还安装了 FFMPEG 构建(GLU 和 GLEW 库)的所有依赖项,并使用 EGL 配置它。

我配置的命令是:

./configure --extra-libs='-lGLEW -lEGL' --enable-filter=gltransition --disable-x86asm
Run Code Online (Sandbox Code Playgroud)

执行此命令后,Enabled Filter 日志中会出现 GLTransition 过滤器。我已经使用命令检查了 GLTransition 过滤器:

./ffmpeg -v 0 -filters | grep gltransition  
Run Code Online (Sandbox Code Playgroud)

但它什么也没显示。

然后还使用下面的 ffmpeg 命令进行交叉检查:

./ffmpeg -i media/0.mp4 -i media/1.mp4 -filter_complex gltransition -y out.mp4
Run Code Online (Sandbox Code Playgroud)

但它显示错误,例如

[AVFilterGraph @ 0x1febe80] No such filter: 'gltransition'
Error initializing complex filters.
Invalid argument.
Run Code Online (Sandbox Code Playgroud)

我是不是错过了什么?

glew ffmpeg filter mesa

5
推荐指数
0
解决办法
1117
查看次数