System.threading C++ нужен метод здесь "совет"
Эй, мне нужен способ, которым я могу добавить свой код рендеринга в класс потока или метод, чтобы мне не пришлось переписывать код...
Например, более простой способ, например вставить мой код рендерера в мой класс или т. д.. затем просто позвольте этому коду рендеринга использовать мой поток чтобы он отображал этот код из кода рендеринга есть ли способ сделать это спасибо
Это мой код, поэтому мне нужно добавить этот код в класс или метод, где я могу выполнить свой поток, чтобы прочитать его и визуализировать...
Есть ли способ сделать это
мой код здесь:
#include "r_local.h" #include "v_palette.h" #include "v_video.h" #include "m_png.h" #include "r_bsp.h" #include "r_swrenderer.h" #include "r_3dfloors.h" #include "textures/textures.h" #include "r_data/voxels.h" class FArchive; void R_SWRSetWindow(int windowSize, int fullWidth, int fullHeight, int stHeight, int trueratio); void R_SetupColormap(player_t *); void R_SetupFreelook(); void R_InitRenderer(); extern float LastFOV; //========================================================================== // // DCanvas :: Init // //========================================================================== void FSoftwareRenderer::Init() { R_InitRenderer(); } //========================================================================== // // DCanvas :: UsesColormap // //========================================================================== bool FSoftwareRenderer::UsesColormap() const { return true; } //=========================================================================== // // Texture precaching // //=========================================================================== void FSoftwareRenderer::PrecacheTexture(FTexture *tex, int cache) { if (tex != NULL) { if (cache & FTextureManager::HIT_Columnmode) { const FTexture::Span *spanp; tex->GetColumn(0, &spanp); } else if (cache != 0) { tex->GetPixels (); } else { tex->Unload (); } } } //=========================================================================== // // Render the view // //=========================================================================== void FSoftwareRenderer::RenderView(player_t *player) { R_RenderActorView (player->mo); // [RH] Let cameras draw onto textures that were visible this frame. FCanvasTextureInfo::UpdateAll (); } //========================================================================== // // // //========================================================================== void FSoftwareRenderer::RemapVoxels() { for (unsigned i=0; i<Voxels.Size(); i++) { Voxels[i]->Remap(); } } //=========================================================================== // // Render the view to a savegame picture // //=========================================================================== void FSoftwareRenderer::WriteSavePic (player_t *player, FILE *file, int width, int height) { DCanvas *pic = new DSimpleCanvas (width, height); PalEntry palette[256]; // Take a snapshot of the player's view pic->ObjectFlags |= OF_Fixed; pic->Lock (); R_RenderViewToCanvas (player->mo, pic, 0, 0, width, height); screen->GetFlashedPalette (palette); M_CreatePNG (file, pic->GetBuffer(), palette, SS_PAL, width, height, pic->GetPitch()); pic->Unlock (); pic->Destroy(); pic->ObjectFlags |= OF_YesReallyDelete; delete pic; } //=========================================================================== // // // //=========================================================================== void FSoftwareRenderer::DrawRemainingPlayerSprites() { R_DrawRemainingPlayerSprites(); } //=========================================================================== // // Get max. view angle (renderer specific information so it goes here now) // //=========================================================================== #define MAX_DN_ANGLE 56 // Max looking down angle #define MAX_UP_ANGLE 32 // Max looking up angle int FSoftwareRenderer::GetMaxViewPitch(bool down) { return down ? MAX_DN_ANGLE : MAX_UP_ANGLE; } //========================================================================== // // OnModeSet // // Called from V_SetResolution() // //========================================================================== void FSoftwareRenderer::OnModeSet () { R_MultiresInit (); RenderTarget = screen; screen->Lock (true); R_SetupBuffer (); screen->Unlock (); } //=========================================================================== // // // //=========================================================================== void FSoftwareRenderer::ErrorCleanup () { fakeActive = 0; fake3D = 0; while (CurrentSkybox) { R_3D_DeleteHeights(); R_3D_LeaveSkybox(); } R_3D_ResetClip(); R_3D_DeleteHeights(); } //=========================================================================== // // // //=========================================================================== void FSoftwareRenderer::ClearBuffer(int color) { memset(RenderTarget->GetBuffer(), color, RenderTarget->GetPitch() * RenderTarget->GetHeight()); } //=========================================================================== // // // //=========================================================================== void FSoftwareRenderer::SetWindow (int windowSize, int fullWidth, int fullHeight, int stHeight, int trueratio) { R_SWRSetWindow(windowSize, fullWidth, fullHeight, stHeight, trueratio); } //=========================================================================== // // // //=========================================================================== void FSoftwareRenderer::SetupFrame(player_t *player) { R_SetupColormap(player); R_SetupFreelook(); } //========================================================================== // // R_CopyStackedViewParameters // //========================================================================== void FSoftwareRenderer::CopyStackedViewParameters() { R_CopyStackedViewParameters(); } //========================================================================== // // // //========================================================================== void FSoftwareRenderer::RenderTextureView (FCanvasTexture *tex, AActor *viewpoint, int fov) { BYTE *Pixels = const_cast<BYTE*>(tex->GetPixels()); DSimpleCanvas *Canvas = tex->GetCanvas(); // curse Doom's overuse of global variables in the renderer. // These get clobbered by rendering to a camera texture but they need to be preserved so the final rendering can be done with the correct palette. unsigned char *savecolormap = fixedcolormap; FSpecialColormap *savecm = realfixedcolormap; float savedfov = LastFOV; R_SetFOV ((float)fov); R_RenderViewToCanvas (viewpoint, Canvas, 0, 0, tex->GetWidth(), tex->GetHeight(), tex->bFirstUpdate); R_SetFOV (savedfov); if (Pixels == Canvas->GetBuffer()) { FTexture::FlipSquareBlockRemap (Pixels, tex->GetWidth(), tex->GetHeight(), GPalette.Remap); } else { FTexture::FlipNonSquareBlockRemap (Pixels, Canvas->GetBuffer(), tex->GetWidth(), tex->GetHeight(), Canvas->GetPitch(), GPalette.Remap); } tex->SetUpdated(); fixedcolormap = savecolormap; realfixedcolormap = savecm; } //========================================================================== // // // //========================================================================== sector_t *FSoftwareRenderer::FakeFlat(sector_t *sec, sector_t *tempsec, int *floorlightlevel, int *ceilinglightlevel, bool back) { return R_FakeFlat(sec, tempsec, floorlightlevel, ceilinglightlevel, back); }
Что я уже пробовал:
Я попытался добавить это в метод, а затем вставил туда свой код рендеринга, но это не сработало, а только дало мне некоторые ошибки...
Richard MacCutchan
Преобразуйте его в библиотеку классов. Затем вы можете добавить его в любой проект.