This tutorial使用显式OUT结构,例如:
struct C3E1v_Output {
float4 position : POSITION;
float4 color : COLOR;
};
C3E1v_Output C3E1v_anyColor(float2 position : POSITION,
uniform float4 constantColor)
{
C3E1v_Output OUT;
OUT.position = float4(position, 0, 1);
OUT.color = constantColor; // Some RGBA color
return OUT;
}但是看看我的一个着色器,我有明确的输入/输出参数:
float4 slice_vp(
// Vertex Inputs
in float4 position : POSITION, // Vertex position in model space
out float4 oposition : POSITION,
// Model Level Inputs
uniform float4x4 worldViewProj) : TEXCOORD6
{
// Calculate output position
float4 p = mul(worldViewProj, position);
oposition=p;
return p;
}我在使用HLSL2GLSL时遇到了一些问题,我想知道是不是我的Cg格式有问题(尽管它作为Cg脚本工作得很好)。有没有一种“正确”的方法,或者这两种方法只是通向同一目的的不同方法?
发布于 2012-12-05 08:13:20
正如您所看到的,这两种方法都有效。但是,我强烈建议使用结构--尤其是顶点着色器的输出(片段着色器的输入)。原因与其说是机器喜欢什么(它并不关心),不如说是创建可以在项目和人员之间安全重用和共享的代码。您希望查找和调试的最后一件事是这样一种情况:一个程序员在某些情况下为TEXCOORD1赋值,而在另一些情况下试图从TEXCOORD2中读取该值。或寄存器不匹配的任何排列。使用structs,你的生活会更好。
https://stackoverflow.com/questions/13126250
复制相似问题