53 lines
1.0 KiB
C
53 lines
1.0 KiB
C
|
#ifndef BLUECORE_RENDER_QUEUE_H
|
||
|
#define BLUECORE_RENDER_QUEUE_H
|
||
|
|
||
|
#include "RenderDevice.h"
|
||
|
|
||
|
namespace BlueCore
|
||
|
{
|
||
|
class RenderItem : public Referenced
|
||
|
{
|
||
|
public:
|
||
|
virtual void render(RenderDevice *) const = 0;
|
||
|
};
|
||
|
|
||
|
class RenderQueue : public Referenced
|
||
|
{
|
||
|
struct QueueItem
|
||
|
{
|
||
|
QueueItem(RenderItem *renderitem, const Vector3& vector,
|
||
|
const Quaternion& quat) :
|
||
|
item(renderitem), position(vector), orientation(quat)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
ref_ptr<RenderItem> item;
|
||
|
Vector3 position;
|
||
|
Quaternion orientation;
|
||
|
};
|
||
|
|
||
|
std::list<QueueItem> _OpaqueItems;
|
||
|
std::list<QueueItem> _TransparentItems;
|
||
|
|
||
|
public:
|
||
|
|
||
|
void addOpaqueItem(RenderItem *item, const Vector3& position,
|
||
|
const Quaternion& orientation);
|
||
|
|
||
|
void addTransparentItem(RenderItem *item, const Vector3& position,
|
||
|
const Quaternion& orientation);
|
||
|
|
||
|
const std::list<QueueItem>& getOpaqueItems();
|
||
|
|
||
|
const std::list<QueueItem>& getTransparentItems();
|
||
|
|
||
|
void clear();
|
||
|
|
||
|
void render(RenderDevice *device) const;
|
||
|
};
|
||
|
|
||
|
} // namespace BluewCore
|
||
|
|
||
|
#endif // BLUECORE_RENDER_QUEUE_H
|