All pastes #792157 Raw Edit

Canvas.cpp

public cpp v1 · immutable
·published 2007-11-21 05:27 UTC
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);}