我正在使用带有GLSL 420的OpenGL 4.2.我需要阻止GLSL编译器优化未使用的制服,因为它们用于偶尔的测试.我试图把:
#version 420
#pragma optimize (off)
...
......
Run Code Online (Sandbox Code Playgroud)
但似乎没有任何影响.编译器仍然清理所有未使用的制服.我正在使用GeForce 680GTX在Linux上运行NVidia驱动程序v319
所以我在div中有一堆图像,如果它们不适合窗口宽度,它们被包裹成几行.我不明白的部分是,为什么这两行之间只有连续超过1个图像?
码:
<style>
img {
width: 350px;
}
</style>
...
<div>
<img src="http://carpaper.net/wp-content/uploads/2013/12/-image.jpg" />
<img src="http://carpaper.net/wp-content/uploads/2013/12/-image.jpg" />
<img src="http://carpaper.net/wp-content/uploads/2013/12/-image.jpg" />
<img src="http://carpaper.net/wp-content/uploads/2013/12/-image.jpg" />
<img src="http://carpaper.net/wp-content/uploads/2013/12/-image.jpg" />
<img src="http://carpaper.net/wp-content/uploads/2013/12/-image.jpg" />
</div>
Run Code Online (Sandbox Code Playgroud)
示例:http://jsbin.com/juterinu/3
我可以在FF和Chrome中看到这种效果.
我试图在OpenGL中实现Adobe Photoshop的Drop Shadow图层样式.我需要在Photoshop的"大小"属性控制的阴影边缘添加模糊度.我首先想到通过典型的高斯模糊算法运行它会很好.但仔细观察效果我很清楚高斯模糊不会产生相同的效果,因为它会均匀地处理光栅的所有碎片.在Photoshop中,模糊区域总是沿着阴影形状的边缘.这样可以朝着形状的中心变宽.任何人都可以指向一个算法或GLSL示例,根据大小参数模糊其边缘的形状,就像在Photoshop中一样?
我一直在阅读这个 OpenGL4.1新功能评论.我真的不明白GL_ARB_separate_program_objects使用背后的想法,至少基于帖子作者的说法:
它允许独立使用着色器阶段而无需更改其他着色器阶段.我看到两个主要原因:Direct3D,Cg甚至旧的OpenGL ARB程序都能做到这一点,但更重要的是它带来了一些软件设计灵活性,允许以更低的粒度查看图形管道.例如,我最好的敌人VAO是一个容器对象,它链接缓冲区数据,顶点布局数据和GLSL程序输入数据.如果没有专门的软件设计,这意味着当我更改对象的材质(一个新的片段着色器)时,我需要不同的VAO ...幸运的是,可以保留相同的VAO,并且只能通过定义如何更改程序在C++程序和GLSL程序之间进行通信.即使存在一些缺点,它也能很好地工作.
现在,这一行:
例如,我最好的敌人VAO是一个容器对象,它链接缓冲区数据,顶点布局数据和GLSL程序输入数据.没有专用的软件设计,这意味着当我更改对象的材质(一个新的片段着色器) ,我需要不同的VAO ......
令我惊讶.在我的OpenGL程序中,我使用VAO对象,我可以在不同的着色器程序之间切换而不对VAO本身做任何改动.所以,我是否误解了整个想法?也许他意味着我们可以在不重新链接的情况下为同一个程序切换着色器?
我已经根据“OpenGL编程指南”第8版(红皮书)中的演示实现了OIT。现在我需要添加MSAA。仅仅启用MSAA就会搞砸透明度,因为分层像素被解析x倍等于数量我读过这篇关于如何使用 DirectX 完成此操作的文章,其中他们说像素着色器应该按样本运行,而不是按像素运行。它在 OpenGL 中是如何完成的。
我不会在这里展示整个实现,而是展示分层像素的最终分辨率发生的片段着色器块:
vec4 final_color = vec4(0,0,0,0);
for (i = 0; i < fragment_count; i++)
{
/// Retrieving the next fragment from the stack:
vec4 modulator = unpackUnorm4x8(fragment_list[i].y) ;
/// Perform alpha blending:
final_color = mix(final_color, modulator, modulator.a);
}
color = final_color ;
Run Code Online (Sandbox Code Playgroud)
更新:
我已经尝试了此处提出的解决方案,但它仍然不起作用。以下是列表构建和解析过程的完整片段着色器:
列出构建过程:
#version 420 core
layout (early_fragment_tests) in;
layout (binding = 0, r32ui) uniform uimage2D head_pointer_image;
layout (binding = 1, rgba32ui) uniform writeonly uimageBuffer list_buffer;
layout (binding = 0, offset = …Run Code Online (Sandbox Code Playgroud) 我使用的是OpenGL 4.3(核心).我的视频卡是支持OpenGL 4.3的NVidia Quadro4000.我决定尝试glClearTexImage()函数.我将GLEW从1.9.0更新到1.10.0,并将此方法映射.输入glClearTexImage行时,Visual Studio将抛出以下异常:
"XXXXX_XXXX.exe中0x757AC9F5处的未处理异常:0xC0000005:访问冲突执行位置0x00000000."
代码很简单:
//...Here the texture is created....
GLuint clearColor = 0;
glBindTexture (_target,newTex);
glClearTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_BYTE, &clearColor);
Run Code Online (Sandbox Code Playgroud) 要在不同的上下文之间共享OpenGL对象(可能在不同的线程中运行),我们在Windows上使用wglShareLists().它是为Linux完成的吗?glx是一个用来做这类事情的API吗?
我正在开发一个跨平台代码库,其中初始工作是使用MS VC2010编译器完成的.后来我在Linux上用GCC(4.7)编译它.在很多情况下我收到:
" GCC中没有匹配的函数调用.."错误.我注意到它主要是在方法参数非常常引用时抱怨.例如:
void MyClass::DoSomeWork(ObjectSP &sprt, const std::string someName, const std::string anotherName, const std::string path, int index) {
sprt->GetProp()->Update(path, false);
}
Run Code Online (Sandbox Code Playgroud)
一旦我将方法更改为:
void MyClass::DoSomeWork(const ObjectSP& sprt, const std::string& someName, const std::string& anotherName, const std::string& path, int index) {
sprt->GetProp()->Update(path, false);
}
Run Code Online (Sandbox Code Playgroud)
海湾合作委员会停止抱怨.为什么会发生这种情况,为什么VC编译器不会发生这种情况?
我没有找到以下问题的简明答案:我有一个生产者 - 消费者线程模型,其中主线程是消费者,而一些工作线程是生产者.生产者线程在应用程序执行期间运行它的线程循环,这是可能的因为它偶尔抛出异常.主线程是UI线程,它应该弹出异常消息,包括来自不同线程的异常消息.如何在主线程中捕获这些异常?
在Windows上使用C++ 0x的boost
WorkerThread.cpp
WorkerThread::WorkerThread(){
m_thread = boost::thread(&WorkerThread::drawThread,this);
}
void WorkerThread::drawThread()
{
while(true)
{
boost::unique_lock<boost::mutex> lock(m_mutex);
try{
///some work is done here...
}catch(std::exception &e){
/// some exception is thrown
/// notify main thread of the exception
}
}
}
Run Code Online (Sandbox Code Playgroud)
需要注意的是,我无法使用try {} catch在主线程中包装WorkerThread,因为它是在某个时刻创建的,从那时起自行运行直到应用程序终止.
我试图从随机数据中生成C#中的16位灰度位图.但是它在Marshal.Copy上崩溃了.
这是我的代码:
Bitmap b16bpp;
private void GenerateDummy16bitImage()
{
b16bpp = new Bitmap(IMAGE_WIDTH, IMAGE_HEIGHT, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);
var rect = new Rectangle(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
var bitmapData = b16bpp.LockBits(rect, ImageLockMode.WriteOnly, b16bpp.PixelFormat);
// Calculate the number of bytes required and allocate them.
var numberOfBytes = bitmapData.Stride * IMAGE_HEIGHT * 2;
var bitmapBytes = new short[numberOfBytes];
// Fill the bitmap bytes with random data.
var random = new Random();
for (int x = 0; x < IMAGE_WIDTH; x++)
{
for (int y = 0; y …Run Code Online (Sandbox Code Playgroud)