//--------------------------------------------------------------------------------------
// Copyright (C) 2008 http://shift.delblanco.es
//--------------------------------------------------------------------------------------
// SHIFT Videogame is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by the
// Free Software Foundation, either version 3 of the License, or later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
//--------------------------------------------------------------------------------------
/// \file Main.h
/// Funciones principales.
/// Fichero con la función principal de la aplicación y con las funciones manejadoras
/// de eventos del bucle principal del programa gráfico
//--------------------------------------------------------------------------------------
#ifndef __CMAIN_H__
#define __CMAIN_H__

//--------------------------------------------------------------------------------------
// Ficheros de cabecera
//--------------------------------------------------------------------------------------
#include "dxstdafx.h"
#include "resource.h"

//--------------------------------------------------------------------------------------
// Constantes
//--------------------------------------------------------------------------------------
//#define MAIN_DEBUG_VS   // Uncomment to debug vertex shaders 
//#define MAIN_DEBUG_PS   // Uncomment to debug pixel shaders 

/// Título de la ventana de la aplicación.
#define       MAIN_WIN_TITLE            L"SHIFT Videogame"

//--------------------------------------------------------------------------------------
// Prototipos de funciones
//--------------------------------------------------------------------------------------
/// Función principal de la aplicación.
INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
/// Función manejadora del evento 'crear el dispositivo'.
HRESULT CALLBACK OnCreateDevice(IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc);
/// Función manejadora del evento 'destruir el dispositivo'.
void    CALLBACK OnDestroyDevice();
/// Función manejadora del evento 'resetear el dispositivo'.
HRESULT CALLBACK OnResetDevice(IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc);
/// Función manejadora del evento 'perder el dispositivo'.
void    CALLBACK OnLostDevice();
/// Función manejadora del evento 'mover la imagen'.
void    CALLBACK OnFrameMove(IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime);
/// Función manejadora del evento 'renderizar la imagen'.
void    CALLBACK OnFrameRender(IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime);
/// Función manejadora del evento 'procesar mensajes de windows'.
LRESULT CALLBACK MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing);
/// Función manejadora del evento 'procesar mensajes del teclado'.
void    CALLBACK KeyboardProc(UINT nChar, bool bKeyDown, bool bAltDown);
/// Función de inicialización de la aplicación.
bool    IniApp(void);
/// Función de des-inicialización de la aplicación.
void    EndApp(void);

#endif
