2016-05-19 36 views
2

私が構築しているOpenGL/Javaエンジン用のシェーダの作成に取り組んでいます。私はしばらく検索しましたが、可変サイズの配列を持つ方法を見つけることはできません。可変サイズの配列GLSL

uniform vec3 variable[4]; 

しかし、どのように私はこれがことも可能であるならば、私は、CPUからシェーダにロードした内容に基づいてサイズXの配列の作成について行くだろう:私は、静的のようなものをサイズのを作成することができることを知っています。

ありがとうございます!

答えて

3

GLSLでは、さまざまな配列サイズを使用できません。しかし、OpenGL 4のように、Shader Storage Buffer Objectsはさまざまなサイズに対応しています。 SSBOs上

詳細情報:https://www.opengl.org/wiki/Shader_Storage_Buffer_Object

今それについて考え、テクスチャにあなたのデータをエンコードして、シェーダの中にそれを渡すことができ、同様にそれを行うためのハック方法。たとえば、4つのrgbaコンポーネントのそれぞれは、渡すデータの1バイトになります。 1バイトを超えるデータの場合は、それをバイト単位で分割します。

2

できません。

CConard96が述べたように、またはSSBOを使用できない場合は、ハードコードされた最大値を宣言し、必要な値を低く設定するだけです。例えば

ニコルボーラはhere言うように:

#define MAX_NUM_TOTAL_LIGHTS 100 
struct Light { 
    vec3 position; 
    float padding; 
} 
layout (std140) uniform Lights { 
    Light light[MAX_NUM_TOTAL_LIGHTS]; 
    int numLights; 
} 
関連する問題