Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= 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
|