小编smo*_*ris的帖子

如何在Qt Creator`pro.shared`文件中指定构建,部署和运行配置?

我可以从https://qt-project.org/doc/qtcreator-2.6/creator-sharing-project-settings.html上的文档中看到如何创建.pro.shared标准化编辑器设置的文件.

但是没有提到构建配置,构建步骤,部署方法或运行配置.

我尝试将我的.pro.user文件(包括自定义构建,部署和运行配置)重命名为.pro.shared,但是当我重新打开项目时,我得到了默认值.

.pro.shared文件中指定这些设置的正确方法是什么?

qt qt-creator

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

如何平息qmake的"警告:未能找到:"?

我正在使用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

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

如何为qmake中的不同目标指定单独的编译选项?

有没有办法为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选项编译.

qmake

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

如何判断FFmpeg解码的视频帧中的颜色是否预先乘以alpha?

当我使用FFmpeg(avcodec_decode_video2(),sws_scale())和一些视频(例如,ProRes4444)解码视频帧时,我得到预先乘以alpha的颜色,并且使用其他视频(例如,QuickTime PNG),我得到的颜色不是预先倍增的通过alpha.

如何判断颜色是否预先倍增?或者,我如何告诉FFmpeg始终提供预乘或未预乘("直alpha")颜色?

graphics video ffmpeg compositing premultiplied-alpha

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

qmake:额外的编译器(处理步骤)?

在我基于 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)

compiler-construction qmake extra xxd

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

如何在共享上下文中呈现给FBO?

我有一个应用程序,我需要执行以下操作:

  1. 将纹理从磁盘加载到GL纹理中
  2. 在其上运行图像过滤器(通过FBO将其渲染到另一个纹理上)
  3. 在屏幕上显示生成的纹理

我有那么多工作.

接下来,我希望能够将步骤#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 …

opengl macos fbo core-graphics render-to-texture

5
推荐指数
2
解决办法
2279
查看次数

在没有帧缓冲的情况下转换反馈?

我有兴趣使用顶点着色器处理缓冲区而不产生任何渲染输出.这是相关的片段:

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,所以我认为不应该使用帧缓冲.

那么,有没有一种方法可以在没有帧缓冲的情况下使用变换反馈,或者我是否需要生成并绑定帧缓冲,即使我不关心它的内容?

opengl transform-feedback

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

Qt Creator` .pro.shared`文件似乎没有任何效果

我在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.

如何才能使其工作,以便在我第一次在新工作站上打开项目时填充默认设置?

qt qt-creator

4
推荐指数
1
解决办法
1462
查看次数

OpenGL纹理单元的范围是什么?

显然,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说纹理,缓冲区和程序对象是分享,但没有说明纹理单位.)

opengl 3d macos graphics core-graphics

4
推荐指数
1
解决办法
494
查看次数

如何在 Doxygen 生成的文档中只包含一些源文件?

在我的项目中,我想扫描所有源文件以获取文档,但只在生成的文档中包含某些源文件的完整源代码(例如示例代码)。

目前我已将SOURCE_BROWSER和设置VERBATIM_HEADERSNO,因此不包含源文件。

尽管有这些设置,有什么方法可以提供我想要包含的源文件列表吗?

或者,如果我重新打开这些选项,是否可以通过某种方式提供要排除的源文件列表?

doxygen

3
推荐指数
1
解决办法
6108
查看次数