Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
#include <iostream>#include <wasdEngine.h> using namespace wasd; int wmain(){ bool fullscreen = false; wasdEngine engine(800, 500, fullscreen, "TestGame"); engine.doRenderLoop(); engine.destroy(); return 0;} |
Quellcode |
|
1 |
Unbehandelte Ausnahme bei 0x0FCF485F (wasdEngine.dll) in testGame.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xCDCDCDCD |
C-/C++-Quelltext |
|
1 |
void wasdEngine::destroy(){ shader->~wasdShader(); device->~wasdDevice(); //<- Fehler [...]} |
C-/C++-Quelltext |
|
1 |
wasdDevice::~wasdDevice(){ swapchain->Release(); dev->Release(); devcon->Release(); backbuffer->Release();} |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
#ifndef wasdEngine_H_#define wasdEngine_H_ #include <Windows.h>#include <SDL.h>#include <SDL_syswm.h>#include "..\src\Declarations.h"#include "..\src\wasdDevice.h"#include "..\src\wasdShader.h"//#include "..\src\wasdModel.h"#include "..\src\wasdObject.h"#include "..\src\Structs.h"#include "..\src\Enums.h"#include <D3D11.h>#include <D3DX10.h>#include <D3DX11.h> namespace wasd{ class wasdShader; class wasdDevice; class WASD_DLL_API wasdEngine { public: wasdEngine(int width, int height, bool fullscreen, char* title); void destroy(); ~wasdEngine(); void doRenderLoop(); HWND getHWND(); int getWidth(); int getHeight(); //std::vector<wasdModel*> models; //std::vector<wasd::wasdObject*> objects; private: SDL_Surface* screen; wasdDevice* device; wasdShader* shader; HWND hWnd; int width, height; };}#endif |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include "..\shared\wasdEngine.h"#include <string>#include <stdio.h>#include "Declarations.h"#include <iostream> using namespace wasd; wasdEngine::wasdEngine(int width, int height, bool fullscreen, char* title){ wasdEngine::width = width; wasdEngine::height = height; //SDL initialisieren SDL_Init(SDL_INIT_VIDEO); //Erzeugung der SDL_Surface if(fullscreen) { screen = SDL_SetVideoMode(width, height, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN); } else { screen = SDL_SetVideoMode(width, height, 32,SDL_HWSURFACE | SDL_DOUBLEBUF); } if(!screen) { MessageBox(NULL, L"Erstellung der SDLSurface fehlgeschlagen", L"Error", MB_ICONERROR | MB_OK); exit(0); } else { std::cout<<"Initialisierung der SDLSurface erfolgreich\n"; } SDL_WM_SetCaption(title, title); SDL_SysWMinfo wminfo; SDL_VERSION(&wminfo.version); SDL_GetWMInfo(&wminfo); hWnd = wminfo.window; //wasdDevice erzeugen device = new wasdDevice(hWnd, fullscreen, width, height); if(!device) { MessageBox(NULL, L"Erstellung des wasdDevices fehlgeschlagen", L"Error", MB_ICONERROR | MB_OK); exit(0); } //Shader erzeugen shader = new wasdShader(device); if(!shader) { MessageBox(NULL, L"Erstellung des wasdShaders fehlgeschlagen", L"Error", MB_ICONERROR | MB_OK); exit(0); }} void wasdEngine::destroy(){ shader->~wasdShader(); device->~wasdDevice(); /*if(models.size() != 0) { for(int i = 0; i < models.size(); i++) { models[i]->~wasdModel(); } } for(int i = 0; i< objects.size(); i++) { objects[i] }*/ SDL_FreeSurface(screen); SDL_Quit();} wasdEngine::~wasdEngine(){ } HWND wasdEngine::getHWND(){ return hWnd;} int wasdEngine::getWidth(){ return width;} int wasdEngine::getHeight(){ return height;} void wasdEngine::doRenderLoop(){ SDL_Event event; bool running = true; while(running) { while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: running = false; break; } } device->RenderFrame(); }} |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
#ifndef wasdDevice_H_#define wasdDevice_H_ #include "Declarations.h"#include <D3D11.h> namespace wasd{ class wasdDevice { public: wasdDevice(HWND hWnd, bool fullscreen, int width, int height); ~wasdDevice(); void createVertexAndPixelShader(ID3D10Blob* VS, ID3D10Blob* PS, ID3D11VertexShader* pVS, ID3D11PixelShader* pPS); void RenderFrame(); private: ID3D11Device* dev; ID3D11DeviceContext* devcon; IDXGISwapChain* swapchain; ID3D11RenderTargetView* backbuffer; DXGI_SWAP_CHAIN_DESC scd; };}#endif |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include "wasdDevice.h"#include "Structs.h"#include "Declarations.h"#include <iostream> using namespace wasd; wasdDevice::wasdDevice(HWND hWnd, bool fullscreen, int width, int height){ ZeroMemory(&scd, sizeof(DXGI_SWAP_CHAIN_DESC)); scd.BufferCount = 1; scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; scd.OutputWindow = hWnd; scd.SampleDesc.Count = 4; if(fullscreen) { scd.Windowed = FALSE; } else { scd.Windowed = TRUE; } D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_REFERENCE, NULL, NULL, NULL, NULL, D3D11_SDK_VERSION, &scd, &swapchain, &dev, NULL, &devcon); //Adresse des Backbuffers bekommen ID3D11Texture2D* pBackBuffer; swapchain->GetBuffer(0, _uuidof(ID3D11Texture2D), (LPVOID*) &pBackBuffer); //bufferadresse benutzen um Render-Taget zu setzen dev->CreateRenderTargetView(pBackBuffer, NULL, &backbuffer); pBackBuffer->Release(); //Backbuffer als Rendertarget setzen devcon->OMSetRenderTargets(1, &backbuffer, NULL); //Viewport setzen D3D11_VIEWPORT viewport; ZeroMemory(&viewport, sizeof(D3D11_VIEWPORT)); viewport.TopLeftX = 0; viewport.TopLeftY = 0; viewport.Width = width; viewport.Height = height; devcon->RSSetViewports(1, &viewport); pBackBuffer->Release(); std::cout<<"Initialisierung des wasdDevice erfolgreich"<<std::endl;} wasdDevice::~wasdDevice(){ swapchain->Release(); dev->Release(); devcon->Release(); backbuffer->Release();} void wasdDevice::createVertexAndPixelShader(ID3D10Blob* VS, ID3D10Blob* PS, ID3D11VertexShader* pVS, ID3D11PixelShader* pPS){ dev->CreateVertexShader(VS->GetBufferPointer(), VS->GetBufferSize(), NULL, &pVS); dev->CreatePixelShader(PS->GetBufferPointer(), PS->GetBufferSize(), NULL, &pPS); devcon->VSSetShader(pVS, 0, 0); devcon->PSSetShader(pPS, 0, 0);} void wasdDevice::RenderFrame(){ // clear the back buffer to a deep blue devcon->ClearRenderTargetView(backbuffer, D3DXCOLOR(0.0f, 0.2f, 0.4f, 1.0f)); swapchain->Present(0, 0);} |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SuperManitu« (05.08.2013, 11:13)
Zitat
Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.
Quellcode |
|
1 2 |
shader->~wasdShader(); device->~wasdDevice(); |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C-/C++-Quelltext |
|
1 2 3 4 |
int main(int _argc, char** _argv) noexcept { asm volatile("lock cmpxchg8b %eax"); return 0; } // ::main |
C-/C++-Quelltext |
|
1 |
delete shader;
|
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SuperManitu« (02.08.2013, 16:14)
Werbeanzeige