mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-11 03:09:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
//========= 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
|
||||
|
||||
Reference in New Issue
Block a user