相変わらずの bus error 10
どうもテクスチャを有効にすると bus error 10 が出てしまうみたいなので、 shaders と renderpass を簡単な物に変更してみました。
void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; gl_Position = ftransform(); }
uniform sampler2D DiffMap0; void main(void) { vec3 color = texture2D(DiffMap0, gl_TexCoord[0].st).xyz; gl_FragColor.rgb = color; gl_FragColor.a = 1.0; }
<?xml version="1.0" encoding="utf-8" ?> <RenderPath name="glsl" shaderPath="renderpath:glsl"> <Shaders> <Shader name="passes" file="shaders:passes.fx" /> <Shader name="phases" file="shaders:phases.fx" /> <Shader name="static" file="shaders:shaders.fx" /> <Shader name="stencil_plane" file="shaders:stencil_plane.fx" /> <Shader name="gui3d" file="shaders:gui.fx" /> <Shader name="water" file="shaders:water.fx" /> <!-- ASIM --> <Shader name="underwaterground" file ="shaders:asim.fx" /> <Shader name="underwater" file ="shaders:asim.fx" /> </Shaders> <Float4 name="ShadowColor" value="0.0 0.0 0.0 0.25" /> <Float4 name="FogDistances" value="10.0 100.0 0.0 0.0" /> <Float4 name="FogColor" value="0.5 0.5 0.5 1.0" /> <Section name="default"> <Pass name="color" shader="passes" technique="tPassColor" clearColor="0.0 0.0 0.0 1.0" clearDepth="1.0" clearStencil="0"> <Phase name="opaque" shader="phases" technique="tPhaseOpaque" sort="FrontToBack" lightMode="FFP"> <Sequence shader="static" technique="tStatic" /> </Phase> </Pass> <Pass name="gui" drawGui="Yes"/> </Section> </RenderPath>
ここまで単純にすれば動作するかな?と思いきや、やっぱり bus error 10 …
nMesh2 が怪しそう…
デバッグを続けていくと、どうやら nGLServer2::DrawIndexedNS あたりに原因がありそうなことがわかりました。
nGLServer2::DrawIndexedNS は、名前のようにインデックスバッファを指定して、プリミティブ(nMesh2)の描画)を行う関数なのですが、どうも glDrawElements を呼び出すとおかしくなるようです。
無理矢理な動作確認…
そんなわけで、直接ポリゴンを描画してみたらどうだろうか?というわけで、またもや無理矢理シェーダー設定を追加してみました。
glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glActiveTexture(GL_TEXTURE0); // change active texture unit to number 0 glBindTexture(GL_TEXTURE_2D, 3 ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glUseProgramObjectARB(7); glUniform1iARB(0, 0); glColor3d(0.2, 0.2, 1.0); glBegin(GL_QUADS); glTexCoord2d(0.0, 1.0); glVertex3d(-10.0, -10.0, 0.0); glTexCoord2d(1.0, 1.0); glVertex3d( 10.0, -10.0, 0.0); glTexCoord2d(1.0, 0.0); glVertex3d( 10.0, 10.0, 0.0); glTexCoord2d(0.0, 0.0); glVertex3d(-10.0, 10.0, 0.0); glEnd();
どうやら、 nMesh2 関係が正しく動作していないみたい。