第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

用于計(jì)算著色器步幅的自定義結(jié)構(gòu)的 sizeof

用于計(jì)算著色器步幅的自定義結(jié)構(gòu)的 sizeof

C#
SMILET 2021-06-29 13:59:02
我正在嘗試使用 Unity 編寫一個(gè)計(jì)算著色器,為體素地形生成網(wǎng)格數(shù)據(jù)(頂點(diǎn)、法線、UV)。因此,我有一個(gè)自定義結(jié)構(gòu)定義如下:[StructLayout(LayoutKind.Sequential, Pack = 0)]private struct VertexData{    public Vector3 position;    public Vector3 normal;    public Vector2 uv;}然后,我正在為 ComputeShader 創(chuàng)建一個(gè) ComputeBuffer,如下所示:vecterDataCBuf = new ComputeBuffer(ChunkSize * ChunkSize * ChunkSize, sizeof(VertexData));我收到 CS0233 錯(cuò)誤,表明我無法在自定義結(jié)構(gòu)上使用 sizeof 運(yùn)算符來提供計(jì)算緩沖區(qū)的步幅,盡管我添加了打包屬性。所以我的問題是,如何在沒有硬編碼的情況下獲得結(jié)構(gòu)的大小?謝謝你。
查看完整描述

2 回答

?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

sizeof除非您在unsafe上下文中,否則僅適用于預(yù)定義的類型。從參考sizeof:


下表顯示了替換具有某些內(nèi)置類型作為操作數(shù)的 sizeof 表達(dá)式的常量值。[...] 對(duì)于所有其他類型,包括結(jié)構(gòu)體,sizeof 運(yùn)算符只能在不安全的代碼塊中使用。


所以把你的電話包裝成unsafe這樣:


int sizeOfVertexData;

unsafe

{

    sizeOfVertexData = sizeof(VertexData);

}

您還必須啟用不安全代碼。在 Unity 中,它顯然是一個(gè)復(fù)選框。


查看完整回答
反對(duì) 回復(fù) 2021-07-11
?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以通過添加每個(gè)屬性大小來計(jì)算結(jié)構(gòu)的總大小。


Vector3 相當(dāng)于 3 個(gè)浮點(diǎn)數(shù)。Vector2 相當(dāng)于 2 個(gè)浮點(diǎn)數(shù)。


//int stride  = sizeof(position) + sizeof(normal) + sizeof(uv)

//int stride  = sizeof(Vector3) + sizeof(Vector3) + sizeof(Vector2)

int stride = sizeof(float) * 3 + sizeof(float) * 3 + sizeof(float) * 2

你不需要不安全的東西。


查看完整回答
反對(duì) 回復(fù) 2021-07-11
  • 2 回答
  • 0 關(guān)注
  • 284 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)