在使用intel显卡的笔记本电脑上进行开发时,在编译顶点着色器时,我得到了这个:
0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
Run Code Online (Sandbox Code Playgroud)
好吧,所以我调整着色器使用版本300 ES.同时,我想检查当前驱动程序/卡支持的GLSL版本,所以我用它:
glGetString ( GL_SHADING_LANGUAGE_VERSION )
Run Code Online (Sandbox Code Playgroud)
令我沮丧的是,只返回"1.30".
我如何获得完整列表?或者即使它不是完整列表,我如何获得标准的GL支持版本和GLES支持的版本?
我在我的项目中使用 GLAD,并使用 cmake 构建所有内容。
由于这是一个外部库而不是我的代码,我想在构建时完全抑制它的警告,因为我得到了很多这些:
warning: ISO C forbids conversion of object pointer to function pointer type [-Wpedantic]
glad_glCullFace = ( PFNGLCULLFACEPROC ) load ( "glCullFace" );
^
Run Code Online (Sandbox Code Playgroud)
我该怎么做?我可以将它包含在我的源代码中,或者使用 GLAD 的源代码做一个 add_library,不管哪种方式。
谢谢
假设我有这个函数来修剪 std::string 并决定扩展它,这样它不仅会删除开头和结尾的空格,还会删除我在另一个字符串中传递的任何字符,如空格、换行符和回车。
std::string Trim ( const std::string &In_Original,
const std::string &In_CharsToTrim = " \n\r" );
Run Code Online (Sandbox Code Playgroud)
所以基本上,它会从 In_Original 的开头和结尾删除 In_CharsToTrim 中存在的所有字符。
现在,我必须为 std::string 和 std::wstring 编写此代码。因为我觉得这很荒谬,所以我选择使用模板,它可以工作,但我无法传递默认值,因为 std::wstring 版本必须L" \n\r"作为默认值(注意那里的小 L)。
我试过这个:
template <typename Type> Type Trim ( const Type &In_String,
const Type &In_TrimCharacters );
Run Code Online (Sandbox Code Playgroud)
随着:
template std::string Trim ( const std::string &In_String,
const std::string &In_TrimCharacters = " \n\r" );
template std::wstring Trim ( const std::wstring &In_String,
const std::wstring &In_TrimCharacters = L" \n\r" );
Run Code Online (Sandbox Code Playgroud)
但它没有用。它甚至不编译。
目前,我拥有的是一个单独的函数,用于在没有第二个参数的情况下调用,但这完全是错误的方法:
template <typename Type> …Run Code Online (Sandbox Code Playgroud) 我试图简化我的一些 makefile,我开始这样做:
TEMP_OBJECTS_C = $(patsubst %.c,%.c.o,$(C_SOURCES))
TEMP_OBJECTS_CPP = $(patsubst %.cpp,%.cpp.o,$(CPP_SOURCES))
Run Code Online (Sandbox Code Playgroud)
但我真正想做的只是将 .o 附加到以 .c 或 .cpp 结尾的任何内容。这仅适用于 .c,如果我想添加 cpp 文件,我必须进行完全独立的替换。我试过这个:
TEMP_OBJECTS = $(patsubst %.c,%.c.o,$(SOURCES)) $(patsubst %.cpp,%.cpp.o,$(SOURCES))
Run Code Online (Sandbox Code Playgroud)
SOURCES 是所有 cpp 和 c 文件,但随后我显然得到了重复的文件,以及其中的原始源文件名...
所以,我去了这个:
TEMP_OBJECTS = $(patsubst %.c,%.c.o,$(SOURCES))
TEMP_OBJECTS = $(patsubst %.cpp,%.cpp.o,$(TEMP_OBJECTS))
Run Code Online (Sandbox Code Playgroud)
但后来它抱怨递归。
有什么方法可以制作我需要的东西吗?谢谢
所以,基本上标题说明了一切。我一直在将我的 unix socket C 代码移植到 Windows,显然这些结构在 Windows 中没有 sin_len 或 sin6_len。
我在任何地方都使用 sockaddr_storage、sockaddr_in 和 sockaddr_in6 之间的联合,并且只是根据 ss_family 使用正确的成员。套接字库可以根据系列推断大小是有道理的,因此长度字段确实是多余的。
如果我注释掉设置长度字段的代码,一切在 OSX 和 linux 上仍然有效,但这可能只是一种错觉,所以我决定在这里问。不知何故,该变量是否已被弃用?我可以安全地停止使用它,并依靠套接字实现来使用家庭变量吗?
所以,我一直在读这个,我还没有得出结论.一些例子使用纹理作为渲染目标,有些人使用渲染缓冲区,有些人同时使用它们!
例如,仅使用纹理:
// Create the gbuffer textures
glGenTextures(ARRAY_SIZE_IN_ELEMENTS(m_textures), m_textures);
glGenTextures(1, &m_depthTexture);
for (unsigned int i = 0 ; i < ARRAY_SIZE_IN_ELEMENTS(m_textures) ; i++) {
glBindTexture(GL_TEXTURE_2D, m_textures[i]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, WindowWidth, WindowHeight, 0, GL_RGB, GL_FLOAT, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, m_textures[i], 0);
}
Run Code Online (Sandbox Code Playgroud)
都:
glGenRenderbuffersEXT ( 1, &m_diffuseRT );
glBindRenderbufferEXT ( GL_RENDERBUFFER_EXT, m_diffuseRT );
glRenderbufferStorageEXT ( GL_RENDERBUFFER_EXT, GL_RGBA, m_width, m_height );
glFramebufferRenderbufferEXT ( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, m_diffuseRT );
glGenTextures ( 1, &m_diffuseTexture );
glBindTexture ( GL_TEXTURE_2D, m_diffuseTexture );
glTexImage2D ( …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ExternalProject_Add 命令从cmake 下载并构建DevIL,但由于某种原因,git 存储库在项目的子文件夹中包含CMakeLists.txt 文件。
我似乎无法找到一种方法使ExternalProject_add 在正确的文件夹上调用cmake。我尝试使用 prefix 和 source_dir,但仍然失败。
然后,我在网上看到一个答案,其中涉及创建一个临时的 CMakeLists.txt,它将调用正确的 cmake 路径。但由于我不知道如何提供 cmake 调用的路径,这意味着我必须将其放入下载的 git 存储库中,后来证明这很痛苦......这是我正在使用的当前命令:包括(“外部项目”)
######### Search for required third-party libraries. If not found, attempt to download and build them ########
set ( DEVIL_ROOT "${THIRD_PARTY_OUTPUT_PATH}/DevIL" )
option ( BUILD_DEVIL "Download and build DevIL" FALSE )
find_package ( Devil )
if ( NOT DEVIL_FOUND )
message ( STATUS "DevIL not found. Forcing to build own copy...")
set ( BUILD_DEVIL TRUE )
endif()
if ( BUILD_DEVIL )
set ( …Run Code Online (Sandbox Code Playgroud) 我正在尝试将opengl中的屏幕区域保存到位图中.我尝试过使用FreeImage和SDL_Image,它们都要求我交换红色和蓝色通道.当然,这让我怀疑glReadPixels是这里的问题......我有这个示例代码:
bool CaptureScreenRegionToFile ( uint32_t In_X, uint32_t In_Y, uint32_t In_Width, uint32_t In_Height, std::string In_Filename )
{
GLubyte* ImageData = ( GLubyte* ) malloc ( In_Width * In_Height * 3 );
glPixelStorei ( GL_PACK_ALIGNMENT, 1 );
glReadPixels ( In_X, In_Y, In_Width, In_Height, GL_RGB, GL_UNSIGNED_BYTE, ImageData );
if ( CheckError() == false )
{
free ( ImageData );
return false;
}
SDL_Surface *Surface;
// JTP TODO Known bug here. Red and blue are swapped, for some reason...
Surface = SDL_CreateRGBSurfaceFrom ( ImageData, …Run Code Online (Sandbox Code Playgroud)