レイアウトで宣言されたGLSurfaceViewからレンダラーを開始しようとしています

私はAndroid上でOpenGLを初心者にしていて、先週、レイアウトで宣言されたGLSurfaceViewのレンダラーを起動できないという問題について説明しました。 Activityクラスでレンダラーを宣言し、それにsetContentViewを宣言すると、それはうまく始まります。 all のソースコードを持つ単純化されたバージョンです。私は間違って何をしていますか?

Layout . . .

<?xml version="1.0" encoding="utf-8"?>


  <button
    android:id="@+id/dummy"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="a Button" />
  
     
    

Activity class. UNcomment the //A's, and comment-out the //B's and the renderer runs. But as shown below the renderer does not run even though its constructor gets called.

public class RenderTest extends Activity {

       RTSurface myView;
       @Override
       public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
//        myView = new RTSurface(this);  //A
//        setContentView(myView);         //A
          setContentView(R.layout.main);       //B
          myView = (com.test.rendertest.RTSurface)findViewById(R.id.RTSurfaceView);  //B
       }

       @Override
       protected void onPause() {
           super.onPause();
           myView.onPause();
       }

       @Override
       protected void onResume() {
           super.onResume();
           myView.onResume();
       }       
}

GLSurfaceView . . .

class RTSurface extends GLSurfaceView  {
   private final RTRenderer renderer;

   public RTSurface(Context context) {
      super(context);
      Log.i("rendertest", "RTSurface constructor - Default Form");
      renderer = new RTRenderer();
      setRenderer(renderer);
   }

   public RTSurface(Context context, AttributeSet attrs) {
      super(context, attrs);    
      Log.i("rendertest", "RTSurface constructor - Layout Form");
      renderer = new RTRenderer();
      setRenderer(renderer);
   }  
}

。 。 。とレンダラー(スタブのみ)

class RTRenderer implements GLSurfaceView.Renderer {

   public RTRenderer() {
      //a constructor just to have somewhere to set 
      //breakpoints and logcat messages
       Log.i("rendertest", "RTRenderer Constructor");      
   }

   public void onSurfaceCreated(GL10 gl, EGLConfig config) {               
      Log.i("rendertest", "onSurfaceCreated in RTRenderer");                   
   }

   public void onSurfaceChanged(GL10 gl, int width, int height) {
      Log.i("rendertest", "onSurfaceChanged in RTRenderer");                
   } 

   public void onDrawFrame(GL10 gl) {   
       Log.i("rendertest", "onDrawFrame in RTRenderer");     
     }  
} 

事前に感謝します!

0
私はあなたのコードをコピーしてプロジェクトに貼り付け、すべてが私のために働く...
追加された 著者 Jave,
もちろん、ハハ!私はJavaコードをコピーして自分自身のレイアウトファイルを書きましたが、それはその欠陥ではないと思いました。今私はそれを読んで明らかに見えます。
追加された 著者 Jave,
@ジャイブ:どうすればそれができますか? LadaRaider(以下)は、(実際の)問題を正しく認識しました。
追加された 著者 Peter Nelson,

1 答え

LinearLayoutの向きを指定していないため、デフォルトで horizo​​ntal に設定されています。つまり、ボタンの幅を fill_parent に設定しているため、GLSurfaceViewが画面外にあることを意味します。

LinearLayoutに次の属性を追加するだけです:


2
追加された
ありがとう、私はあなたの他の質問にも答えます。はい、これは難しい問題でした。なぜなら、ビューが表示されていなければ、それはまったく描画されない(無駄な関数呼び出しを避けるためです)。
追加された 著者 Dalmas,
サーフェスが作成されないか、レンダラーが表示されないだけでレンダリングが実行されないことは、私には決してありませんでした。どのようにそのことについて?!とにかくこれに気づいてくれてありがとう、もしあなたが50ポンドの賞金を手に入れたいのであれば、これは私の他の質問に対する答えです: stackoverflow.com/questions/8498877/… (私はLadaRaiderの回答としてフラグを立てます)
追加された 著者 Peter Nelson,