GL_SHADER_STORAGE_BUFFER 和GL_UNIFORM_BUFFER

shader storage buffer

DEFINE POINTER name=buffer_1394, type=uint, count=1, data=imm{null};
glGenBuffers(1, buffer_1394);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer_1394[0]);
DEFINE POINTER name=ssb_0, type=ubyte, count=2980, data=file{NULL};
glBufferData(GL_SHADER_STORAGE_BUFFER, 2980, ssb_0, GL_DYNAMIC_COPY);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, buffer_1394[0]);

shader 里的用法:

layout(std430, binding = 0) buffer tess_buffer_layout
{
    float TessLevelOuter[100];
} ts_buffer;

 

uniform buffer:

 

DEFINE POINTER name=buffer_0, type=uint, count=1, data=imm{null};
glGenBuffers(1, buffer_0);

glBindBuffer(GL_UNIFORM_BUFFER, buffer_0[0]);

DEFINE POINTER name=buffer_1, type=ubyte, count=608, data=file{buffer_1.bin};
glBufferData(GL_UNIFORM_BUFFER, 608, buffer_1, GL_STREAM_DRAW);

 

glBindBufferBase(GL_UNIFORM_BUFFER, 1, buffer_0[0]);
glBindBuffer(GL_UNIFORM_BUFFER, buffer_0[0]);

DEFINE POINTER name=buffer_77, type=ubyte, count=608, data=file{buffer_77.bin};
glBufferSubData(GL_UNIFORM_BUFFER, 0, 608, buffer_77);

shader 用法:

 

layout(std140, binding=1) uniform
#else
struct
#endif
    
TessellationParams
{
    float innerTessFactor;
    float outerTessFactor;

    float noiseFreq;
    int noiseOctaves;
    float invNoiseSize;
    float invNoise3DSize;
    float heightScale;

    float triSize;
    SDK_VEC4 viewport;

    SDK_MAT4 ModelView;
    SDK_MAT4 ModelViewProjection;
    SDK_MAT4 Projection;
    SDK_MAT4 InvProjection;
    SDK_MAT4 InvView;

    SDK_BOOL smoothNormals;
    SDK_BOOL cull;
    SDK_BOOL lod;
    SDK_VEC3 lightDir;
    SDK_VEC3 lightDirWorld;
    SDK_VEC4 eyePosWorld;

    SDK_VEC4 frustumPlanes[6];

    float time;
    SDK_VEC2 translate;

    int gridW, gridH;
    SDK_VEC3 tileSize;
    SDK_VEC3 gridOrigin;
    float tileBoundingSphereR;

    float invFocalLen;
    
#ifdef CPP
    TessellationParams() :
        innerTessFactor(32.0f),
        outerTessFactor(32.0f), 
        noiseFreq(0.25f), 
        heightScale(1.5f),
        noiseOctaves(8),
        triSize(5.0f),
        cull(true),
        lod(true),
        lightDir(0.0f, 0.0f, -1.0f),
        time(0.0f),
        gridOrigin(-8.0f, 0.0f, -8.0f),
        gridW(16), gridH(16),
        tileSize(1.0f, 0.0f, 1.0f)
        {
            nv::vec3f halfTileSize = nv::vec3f(tileSize.x, heightScale, tileSize.z)*0.5f;
            tileBoundingSphereR = length(halfTileSize);
        }
#endif
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值