我可以从https://qt-project.org/doc/qtcreator-2.6/creator-sharing-project-settings.html上的文档中看到如何创建.pro.shared标准化编辑器设置的文件.
但是没有提到构建配置,构建步骤,部署方法或运行配置.
我尝试将我的.pro.user文件(包括自定义构建,部署和运行配置)重命名为.pro.shared,但是当我重新打开项目时,我得到了默认值.
在.pro.shared文件中指定这些设置的正确方法是什么?
我正在使用PRE_TARGETDEPS生成源文件,我正在添加生成的源文件以SOURCES进行编译.
在qmake运行时,我的生成器的输出显然不存在,因此WARNING: Failure to find:每个要创建的源文件的qmake输出.
我怎么能平息这个警告,因为我知道我PRE_TARGETDEPS要生产这些文件?
或者,有没有更好的方法来使用qmake生成中间文件?
这是一个test.pro展示问题的完整文件:
TEMPLATE = lib
preprocess.commands += cat test.cc.in | sed 's/a/0/g' > test.0.cc ;
preprocess.commands += cat test.cc.in | sed 's/a/1/g' > test.1.cc ;
preprocess.depends = test.cc.in
QMAKE_EXTRA_TARGETS += preprocess
PRE_TARGETDEPS += preprocess
SOURCES = test.0.cc test.1.cc
Run Code Online (Sandbox Code Playgroud)
将其放在一个空文件夹中,并创建一个空test.cc.in文件.运行qmake,你会看到这些警告:
WARNING: Failure to find: test.0.cc
WARNING: Failure to find: test.1.cc
Run Code Online (Sandbox Code Playgroud) 有没有办法为qmake中的不同目标指定单独的编译选项?
例如:
QMAKE_CXXFLAGS += -O
SOURCES += file1.cpp
QMAKE_CXXFLAGS += -std=gnu++0x -O
SOURCES += file2.cpp
Run Code Online (Sandbox Code Playgroud)
因此file1.cpp将仅使用-O选项编译,文件file2.cpp使用-std = gnu ++ 0x -O选项编译.
当我使用FFmpeg(avcodec_decode_video2(),sws_scale())和一些视频(例如,ProRes4444)解码视频帧时,我得到预先乘以alpha的颜色,并且使用其他视频(例如,QuickTime PNG),我得到的颜色不是预先倍增的通过alpha.
如何判断颜色是否预先倍增?或者,我如何告诉FFmpeg始终提供预乘或未预乘("直alpha")颜色?
在我基于 qmake 的项目中,我想在编译之前对某些文件运行“xxd”。根据文档,我的 pro 文件中的相关部分如下所示:
SHADERS = shader/tone.frag \
shader/trans.frag \
shader/hue.frag
# xxd
xxd.output = ${QMAKE_FILE_NAME}.xxd
xxd.commands = xxd -i ${QMAKE_FILE_NAME} > ${QMAKE_FILE_OUT}
xxd.depends = SHADERS
xxd.input = $$SHADERS
xxd.variable_out = HEADERS
QMAKE_EXTRA_COMPILERS += xxd
Run Code Online (Sandbox Code Playgroud)
Qmake 不会抱怨,但它也根本不运行 xxd。我是否必须为要预处理的每个文件创建特殊目标?(生成的*.xxd文件不会被我事后编译,只包含在其他cpp文件中)
编辑:在 smokris 的帮助下,这就是我修复 pro 文件中的部分的方法:
# xxd
xxd.output = ${QMAKE_FILE_NAME}.xxd
xxd.commands = xxd -i ${QMAKE_FILE_NAME} > ${QMAKE_FILE_OUT}
xxd.depends = $$SHADERS
xxd.input = SHADERS
xxd.variable_out = HEADERS
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,我需要执行以下操作:
我有那么多工作.
接下来,我希望能够将步骤#2移动到单独的共享GL上下文中.
在初始化时,我创建了一个共享上下文:
rootContext = CGLGetCurrentContext();
CGLPixelFormatObj pf = CGLGetPixelFormat(rootContext);
CGLCreateContext(pf, rootContext, &childContext);
Run Code Online (Sandbox Code Playgroud)
...然后使其成为当前并在其上设置帧缓冲...
CGLSetCurrentContext(childContext);
glGenTextures(1, &childTexture);
glBindTexture(GL_TEXTURE_2D, childTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.width(), image.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glGenFramebuffers(1, &childFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, childFramebuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, childTexture, 0);
Run Code Online (Sandbox Code Playgroud)
然后,当渲染每一帧时,我将childContext当前渲染并渲染到它:
CGLSetCurrentContext(childContext);
glBindFramebuffer(GL_FRAMEBUFFER, childFramebuffer);
glUseProgram(childProgram);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, inputTexture);
glUniform1i(childTextureUniform, 0);
glBindBuffer(GL_ARRAY_BUFFER, childQuadPositionBuffer);
glVertexAttribPointer(childPositionAttribute, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*2, (void*)0);
glEnableVertexAttribArray(childPositionAttribute);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, childQuadElementBuffer);
glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, (void*)0);
glDisableVertexAttribArray(childPositionAttribute);
glUseProgram(0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
Run Code Online (Sandbox Code Playgroud)
...然后我创建rootContext …
我有兴趣使用顶点着色器处理缓冲区而不产生任何渲染输出.这是相关的片段:
glUseProgram(program);
GLuint tfOutputBuffer;
glGenBuffers(1, &tfOutputBuffer);
glBindBuffer(GL_ARRAY_BUFFER, tfOutputBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(double)*4*3, NULL, GL_STATIC_READ);
glEnable(GL_RASTERIZER_DISCARD_EXT);
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tfOutputBuffer);
glBeginTransformFeedbackEXT(GL_TRIANGLES);
glBindBuffer(GL_ARRAY_BUFFER, positionBuffer);
glEnableVertexAttribArray(positionAttribute);
glVertexAttribPointer(positionAttribute, 4, GL_FLOAT, GL_FALSE, sizeof(double)*4, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBuffer);
glDrawElements(GL_TRIANGLES, 1, GL_UNSIGNED_INT, 0);
Run Code Online (Sandbox Code Playgroud)
这可以正常工作,直到glDrawElements()调用,这导致GL_INVALID_FRAMEBUFFER_OPERATION.并glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);返回GL_FRAMEBUFFER_UNDEFINED.
我认为这是因为我的GL上下文没有默认的帧缓冲,我没有绑定另一个FBO.但是,因为我不关心渲染输出并且我已经启用了GL_RASTERIZER_DISCARD_EXT,所以我认为不应该使用帧缓冲.
那么,有没有一种方法可以在没有帧缓冲的情况下使用变换反馈,或者我是否需要生成并绑定帧缓冲,即使我不关心它的内容?
我在Mac OS 10.8.2上使用Qt Creator 2.6.0,我myproject.pro.shared在同一个文件夹中创建了一个文件myproject.pro.我将示例XML从https://qt-project.org/doc/qtcreator-2.6/creator-sharing-project-settings.html复制到该myproject.pro.shared文件中.我删除了我的~/.config/QtProject/文件夹,但我没有myproject.pro.user文件.
当我启动Qt Creator并打开项目文件时,myproject.pro.shared不使用指定的设置.例如,myproject.pro.shared指定TabSize为14,但在Projects> Editor下,"Editor settings"仍然显示"Global",而Tab大小不是14.
如何才能使其工作,以便在我第一次在新工作站上打开项目时填充默认设置?
显然,OpenGL纹理单元的范围并不比单个进程宽 - 在同一系统上,每个进程可以有多个进程glActiveTexture?(GL_TEXTURE0); glBindTexture(...);,并且工作正常 - 纹理不会在进程之间混淆.
但是,在单个进程中的共享OpenGL上下文中,纹理单元是独立的还是共享的?
换句话说,我可以期待这个吗?
// Create a base context and bind one texture to GL_TEXTURE0
CGLContextObj baseContext = createGLContext(NULL);
{
CGLContextObj cgl_ctx = baseContext;
glActiveTexture?(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 1);
// ...render continuously...
}
// On a separate thread, create a context shared with baseContext and bind a _different_ texture to GL_TEXTURE0
{
CGLContextObj cgl_ctx = createGLContext(baseContext);
glActiveTexture?(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 2);
// ...render continuously...
}
Run Code Online (Sandbox Code Playgroud)
......或者,在第二种情况下,我应该使用GL_TEXTURE1吗?
这记录在哪里?(我已经浏览了opengl.org手册和wiki,但没有找到解释这个场景的任何内容.例如,http://www.opengl.org/wiki/OpenGL_Context说纹理,缓冲区和程序对象是分享,但没有说明纹理单位.)
在我的项目中,我想扫描所有源文件以获取文档,但只在生成的文档中包含某些源文件的完整源代码(例如示例代码)。
目前我已将SOURCE_BROWSER和设置VERBATIM_HEADERS为NO,因此不包含源文件。
尽管有这些设置,有什么方法可以提供我想要包含的源文件列表吗?
或者,如果我重新打开这些选项,是否可以通过某种方式提供要排除的源文件列表?