我正在尝试比较GLSL中的统一bool(type_2d),以便输出两种采样器类型之一 - sampler2D和samplerCube。这纯粹用于区分立方体贴图(天空盒,反射立方体贴图数据等)和sampler2d(反照率贴图,法线贴图等)。
我尝试过使用整数,浮点数和布尔值进行比较,但是帧缓冲区始终会转换为黑屏。
请记住,如果我将“主”中的bool值硬编码,例如“type_2d = false”而没有统一分配,则立方体贴图结果可以正常工作,而不是解析来自C ++的统一值。
这是“GBuffer.f”代码:
setwd("my_directory")
# variable for csv directory
csvFolder <- "csv_directory"
flist <- list.files(path = csvFolder)
masterCorpus <- data.frame()
# This vector gives you the full file list in your directory
allFilesInDirectory <- list.files(csvFolder, full=TRUE)
# This vector will read the data from allFilesInDirectory vector
allTheData <- lapply(allFilesInDirectory, read.csv, header=TRUE)
parentVector <- c("Mother","mother", "Father","father","Adult","adult","MOT","FAT")
为什么统一bool比较永远不会在片段着色器中工作?我甚至设法从GLSL获得统一值,并且解析阶段似乎工作得很好 - 这几乎就像GLSL 拒绝使用它进行比较,因此返回一个NULL纹理样本创建一个黑屏影响。任何想法?
答案 0 :(得分:0)
由于一些奇怪的原因,我不得不设置glActoveTexture(GL_TEXTURE1);和glUniform1i(id,1);用于渲染立方体贴图纹理(即使我在几何体paas内部之前没有调用GL_TEXTURE0)。我想立方体贴图纹理需要额外的偏移值,因为采样器类型?想不出任何其他原因。
答案 1 :(得分:0)
在OpenGL中,单个纹理单元具有多个不同纹理类型的绑定目标,例如GL_TEXTURE_1D
,GL_TEXTURE_2D
,GL_TEXTURE_BUFFER
,GL_TEXTURE_CUBE_MAP
。所以从技术上讲,你可以将多个纹理绑定到一个单元。
默认情况下,GL_TEXTURE0
是活动纹理单元,所有制服都初始化为0
,包括采样器制服。因此,如果你jsut glBindTexture()
2D纹理和立方体贴图,你最终会得到它。
然而,虽然在GL中完全允许将几种不同的纹理类型同时绑定到单个单元,但您可以从一个特定纹理目标中采样每个单位。 OpenGL 4.6 core profile specification, Section "7.11 Samplers", page 155明确指出:
不允许指向不同采样器类型的变量 程序对象中的相同纹理图像单元。 只能在下一个触发着色器调用的渲染命令中检测到这种情况, 然后会生成
INVALID_OPERATION
错误。
因此,即使您使用制服在两个路径之间切换,您的程序对象在技术上也会使两个采样器制服都处于活动状态,并且无需将它们设置为从不同纹理单元进行采样,您最终会进入禁区。