2016-04-06 11 views
-1

私はsdl2を使用しており、ハードウェアレンダリングのソフトウェアレンダリングisteadを使用しようとしています。今まで私はハードウェアレンダリングを使用していて、すべてが素晴らしいものでした。私がソフトウェアレンダリングをすることは非常に重要です。sdlソフトウェアレンダラが動作しない、ハードウェアアクセラレーションが1つで動作する

大きな疑問は、ソフトウェアレンダラとハードウェアレンダラの動作が異なるのはなぜですか?それを修正する方法は?ここで

は私の問題です:

そこで私は、表面にレンダリングするレンダラをクリートするSDL_CreateSoftwareRendererを使用して、私は実際には窓面である表面を表示します。 (私は何らかの理由で表面が必要です...)。

レンダリングが、その後のループで構成されています

SDL_SetRenderDrawColor(gRenderer, 0XFF, 0XFF, 0X00, 0XFF); 
    SDL_RenderClear(gRenderer); 
    SDL_SetRenderDrawColor(gRenderer, 0X0F, 0X00, 0XF0, 0XFF); 
    SDL_SetRenderDrawColor(gRenderer, 0X0F, 0X00, 0XF0, 0XFF); 
    SDL_Rect rect; 
    rect.x = 0; 
    rect.y = 5; 
    rect.w = 10; 
    rect.h = 2; 
    SDL_RenderFillRect(gRenderer, &rect); 
    std::cout << "begin" << std::endl; 

    for (auto& i : zIndexOrder) { 
     //Rectangles[i]->get_x(); 
     Rectangles[i]->updat_move_fnct(); 
     if (Rectangles[i]->everyframe_fct != NULL)Rectangles[i]->everyframe_fct(Rectangles[i]); 
     //Rectangles[i]->index_th = i; 
    } 
    for (auto u : Underwindows)u->Refresh(); 

    for (auto& i : zIndexOrder)Rectangles[i]->draw(this); 


    SDL_SetRenderDrawColor(gRenderer, 0X0F, 0X00, 0XF0, 0XFF); 
    rect.x = 0; 
    rect.y = 5; 
    rect.w = 5; 
    rect.h = 5; 
    SDL_RenderFillRect(gRenderer, &rect); 

    std::cout << "true RENDERER " << gRenderer << std::endl; 

    if (SOFTWARE_RENDERING) SDL_UpdateWindowSurface(gWindow); 
    else SDL_RenderPresent(gRenderer); 

SDL_RenderFillRect(f->get_screen_render(), &rect);とここに描かれた2つの長方形が細かい描きしかし、私は同じそれは動作しません呼び出す作る場合ectangles[i]->draw(this);に私は

を呼ぶ意味
  SDL_SetRenderDrawColor(f->get_screen_render(), 0X0F, 0X00, 0XF0, 0XFF); 
      SDL_Rect rect; 
      rect.x = 6; 
      rect.y = 5; 
      rect.w = 10; 
      rect.h = 55; 
      SDL_RenderFillRect(f->get_screen_render(), &rect); 

ectangles[i]->draw(this);であり、矩形は描画されません。

3つの矩形が異なるサイズのものであることに注意してください。透明色は描画色と同じではありません。f->get_screen_render()は、他の2つの呼び出しのレンダラーと同じポインターをレンダラーに与えます。コードの実行(私はコンソールのおかげでこれを知っている)、そして最後にそれは2つの他の抽選の間に実行されます。

は、彼らのすべてがソフトウェア1でハードウェアアクセラレーションレンダラないで動作する理由だろうか?

私のコードは何千ものコード行で構成されているので、もし私が助けてくれるようなら、私は彼に与えることができますが、私はここに置くことはできません。助けのための

ありがとう^^

答えて

0

問題はここにある:

if (SOFTWARE_RENDERING) SDL_UpdateWindowSurface(gWindow); 
else SDL_RenderPresent(gRenderer); 

あなたは常にコールSDL_RenderPresentどんなレンダリングドライバー必要があります。

+0

あなたは、あなたの開発環境を説明し、不正な動作を再現する小さなCプログラムを書くためのいくつかの時間を取る必要があります(私はすでにこれを試してみました) –

+0

その答えをありがとう、それはまだ動作していません。そうすれば、あなたを助けることがはるかに簡単になります。 –

関連する問題