rendered paste body#include "Canvas.h"#include "Object.h"#include <stdio.h>Canvas::Canvas(void){ //default window settings fullscreen = false; wWidth = 1024; wHeight = 768; //setup default values renderTime = 0.0f; fps = 0; renders = 0; // Setup Debug console AllocConsole(); freopen("CONOUT$", "w", stdout); cout << "Canvas created successfully.\n"; }Canvas::~Canvas(void){ FreeConsole(); gD3dDevice->Release(); gD3dObject->Release(); gFont->Release(); gSprite->Release();}unsigned char Canvas::getFPS(void){ return fps;}bool Canvas::LoadSettings(void){ return true;}bool Canvas::LoadGraphics(void){ D3DXCreateTextureFromFile(gD3dDevice, "bran.png", &bran); return true;}bool Canvas::Render(void){ float startTime = timeGetTime(); // Clear the back buffer gD3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(200,200,200), 1.0f, 0 ); // Begin the scene if(SUCCEEDED(gD3dDevice->BeginScene())){ //begin rendering //3D for(unsigned int i = 0; i < objectList.size(); i++){ Object *ob = objectList.at(i); D3DXMATRIXA16 matWorld, transMat, rotMat; D3DXMatrixTranslation(&transMat, ob->getPos()->x, ob->getPos()->y, ob->getPos()->z); D3DXMatrixRotationYawPitchRoll(&rotMat, ob->getRot()->x, ob->getRot()->y, ob->getRot()->z); D3DXMatrixMultiply(&matWorld, &rotMat, &transMat); gD3dDevice->SetTransform( D3DTS_WORLD, &matWorld ); for(unsigned int i = 0; i < ob->getNumMats(); i++){ // Set the material and texture for this subset gD3dDevice->SetMaterial( &((ob->getMat())[i]) ); gD3dDevice->SetTexture( 0, (ob->getTex())[i] ); // Draw the mesh subset //g_pMesh->DrawSubset( i ); (*ob->getMesh())->DrawSubset(i); } } objectList.clear(); //2D gSprite->Begin(D3DXSPRITE_ALPHABLEND); /*for(unsigned int i = 0; i < spriteList.size(); i++){ Sprite sp = spriteList.at(i); D3DXMATRIX mout; D3DXMatrixIdentity(&mout); if(sp.doScale()) D3DXMatrixTransformation2D(&mout, 0, 0, sp.getScale(), 0, 0, &(D3DXVECTOR2(0.0f, 0.0f))); gSprite->SetTransform(&mout); gSprite->Draw(*(sp.getTexture()), sp.getSrc(), NULL, sp.getPos(), 0xFFFFFFFF); } spriteList.clear();*/ //TEXT //for(unsigned int i = 0; i < textList.size(); i++){ RECT pos; pos.top = pos.left = 0; pos.bottom = 50; pos.right = 200; char text[50]; sprintf(text, "FPS: %d", getFPS()); gFont->DrawText(gSprite, text, -1, &pos, 0, 0xFF000000); //} D3DXMATRIX mout; D3DXMatrixIdentity(&mout); gSprite->SetTransform(&mout); D3DXVECTOR3 logo; logo.z = 0; logo.x = 1024-256; logo.y = 768-128; gSprite->Draw(bran, NULL, NULL, &logo, 0xFFFFFFFF); gSprite->End(); }else return false; // Finished rendering gD3dDevice->EndScene(); gD3dDevice->Present(NULL,NULL,NULL,NULL); float endTime = timeGetTime(); renderTime += (endTime - startTime); renders++; if(renderTime > 1000){ renderTime = 0; fps = renders; renders = 0; } return true;}bool Canvas::Initialise(void){ //Setup D3D gD3dObject=Direct3DCreate9(D3D_SDK_VERSION); if(gD3dObject==NULL) return false; D3DPRESENT_PARAMETERS presParams; ZeroMemory(&presParams,sizeof(presParams)); presParams.Windowed = !fullscreen; presParams.SwapEffect = D3DSWAPEFFECT_DISCARD; presParams.BackBufferFormat = D3DFMT_UNKNOWN; presParams.BackBufferCount = 1; presParams.BackBufferHeight = wHeight; presParams.BackBufferWidth = wWidth; presParams.hDeviceWindow = *hWnd; presParams.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; presParams.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; presParams.MultiSampleType = D3DMULTISAMPLE_NONE; presParams.MultiSampleQuality = 0; // Create the D3D device HRESULT hr=gD3dObject->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, *hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &presParams, &gD3dDevice); if(FAILED(hr)){ // Some cards may not do hardware vertex processing so fall back to software: hr=gD3dObject->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, *hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &presParams, &gD3dDevice); if(FAILED(hr)) return false; } // Turn on the zbuffer gD3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE ); // Turn on ambient lighting gD3dDevice->SetRenderState( D3DRS_AMBIENT, 0xffffffff ); D3DXVECTOR3 vEyePt( 0.0f, 3.0f, -50.0f ); D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f ); D3DXMATRIXA16 matView; D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec ); gD3dDevice->SetTransform( D3DTS_VIEW, &matView ); D3DXMATRIXA16 matProj; D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f ); gD3dDevice->SetTransform( D3DTS_PROJECTION, &matProj ); hr=D3DXCreateSprite(gD3dDevice,&gSprite); if(FAILED(hr)) return false; return true;}bool Canvas::sethWnd(HWND *_hWnd){ hWnd = _hWnd; return true;}unsigned int Canvas::getWidth(void){ return wWidth;}unsigned int Canvas::getHeight(void){ return wHeight;}bool Canvas::InitFont(void){ //TODO: Error check function return value D3DXCreateFont(gD3dDevice, 50, 0, 0,//FW_BOLD, 0, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT("STENCIL STD"), &gFont); return true;}void Canvas::addSprite(Sprite newSprite){ spriteList.push_back(newSprite);}void Canvas::addObject(Object* newObject){ objectList.push_back(newObject);}