MacOSX 上で Nebula Device 2 の build に挑戦中(4)

相変わらずの 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();

tex 表示されました。(色がおかしいけど…)

どうやら、 nMesh2 関係が正しく動作していないみたい。