私は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でハードウェアアクセラレーションレンダラないで動作する理由だろうか?
私のコードは何千ものコード行で構成されているので、もし私が助けてくれるようなら、私は彼に与えることができますが、私はここに置くことはできません。助けのための
ありがとう^^
あなたは、あなたの開発環境を説明し、不正な動作を再現する小さなCプログラムを書くためのいくつかの時間を取る必要があります(私はすでにこれを試してみました) –
その答えをありがとう、それはまだ動作していません。そうすれば、あなたを助けることがはるかに簡単になります。 –