You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.8 KiB
106 lines
2.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: interface to asynchronous lighting preview creator |
|
// |
|
//===========================================================================// |
|
|
|
#ifndef LPREVIEW_THREAD_H |
|
#define LPREVIEW_THREAD_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "tier0/threadtools.h" |
|
#include "bitmap/bitmap.h" |
|
#include "bitmap/float_bm.h" |
|
#include "tier1/utlvector.h" |
|
#include "mathlib/lightdesc.h" |
|
|
|
|
|
|
|
|
|
|
|
class CLightingPreviewLightDescription : public LightDesc_t |
|
{ |
|
public: |
|
int m_nObjectID; |
|
class CIncrementalLightInfo *m_pIncrementalInfo; |
|
void Init( int obj_id ) |
|
{ |
|
m_pIncrementalInfo = NULL; |
|
m_nObjectID = obj_id; |
|
} |
|
}; |
|
|
|
enum HammerToLightingPreviewMessageType |
|
{ |
|
// messages from hammer to preview task |
|
LPREVIEW_MSG_STOP, // no lighting previews open - stop working |
|
LPREVIEW_MSG_EXIT, // we're exiting program - shut down |
|
LPREVIEW_MSG_GEOM_DATA, // we have new shadow geometry data |
|
LPREVIEW_MSG_G_BUFFERS, // we have new g buffer data from the renderer |
|
LPREVIEW_MSG_LIGHT_DATA, // new light data in m_pLightList |
|
}; |
|
|
|
enum LightingPreviewToHammerMessageType |
|
{ |
|
// messages from preview task to hammer |
|
LPREVIEW_MSG_DISPLAY_RESULT, // we have a result image |
|
}; |
|
|
|
|
|
struct MessageToLPreview |
|
{ |
|
HammerToLightingPreviewMessageType m_MsgType; |
|
|
|
MessageToLPreview( HammerToLightingPreviewMessageType mtype) |
|
{ |
|
m_MsgType = mtype; |
|
} |
|
MessageToLPreview( void) |
|
{ |
|
} |
|
|
|
// this structure uses a fat format for the args instead of separate classes for each |
|
// message. the messages are small anyway, since pointers are used for anything of size. |
|
FloatBitMap_t *m_pDefferedRenderingBMs[4]; // if LPREVIEW_MSG_G_BUFFERS |
|
CUtlVector<CLightingPreviewLightDescription> *m_pLightList; // if LPREVIEW_MSG_LIGHT_DATA |
|
Vector m_EyePosition; // for LPREVIEW_MSG_LIGHT_DATA & G_BUFFERS |
|
CUtlVector<Vector> *m_pShadowTriangleList; // for LPREVIEW_MSG_GEOM_DATA |
|
int m_nBitmapGenerationCounter; // for LPREVIEW_MSG_G_BUFFERS |
|
|
|
}; |
|
|
|
struct MessageFromLPreview |
|
{ |
|
LightingPreviewToHammerMessageType m_MsgType; |
|
Bitmap_t *m_pBitmapToDisplay; // for LPREVIEW_MSG_DISPLAY_RESULT |
|
int m_nBitmapGenerationCounter; // for LPREVIEW_MSG_DISPLAY_RESULT |
|
MessageFromLPreview( LightingPreviewToHammerMessageType msgtype ) |
|
{ |
|
m_MsgType = msgtype; |
|
} |
|
MessageFromLPreview( void ) |
|
{ |
|
} |
|
|
|
}; |
|
|
|
extern CMessageQueue<MessageToLPreview> g_HammerToLPreviewMsgQueue; |
|
extern CMessageQueue<MessageFromLPreview> g_LPreviewToHammerMsgQueue; |
|
extern ThreadHandle_t g_LPreviewThread; |
|
|
|
extern CInterlockedInt n_gbufs_queued; |
|
extern CInterlockedInt n_result_bms_queued; |
|
|
|
extern Bitmap_t *g_pLPreviewOutputBitmap; |
|
|
|
// the lighting preview thread entry point |
|
|
|
unsigned LightingPreviewThreadFN( void *thread_start_arg ); |
|
|
|
// the lighting preview handler. call often |
|
void HandleLightingPreview( void ); |
|
|
|
#endif |
|
|
|
|