Add snapshot for Lime legacy

This commit is contained in:
Joshua Granick
2014-11-12 22:20:57 -08:00
parent 3482813780
commit bdc7039b19
239 changed files with 92735 additions and 55 deletions

View File

@@ -0,0 +1,147 @@
#ifndef NME_HARDWARE_H
#define NME_HARDWARE_H
#include "Graphics.h"
namespace nme
{
void ResetHardwareContext();
typedef QuickVec<UserPoint> Vertices;
enum PrimType { ptTriangleFan, ptTriangleStrip, ptTriangles, ptLineStrip, ptPoints, ptLines };
enum
{
DRAW_HAS_COLOUR = 0x00000001,
DRAW_HAS_NORMAL = 0x00000002,
DRAW_HAS_PERSPECTIVE = 0x00000004,
DRAW_RADIAL = 0x00000008,
DRAW_HAS_TEX = 0x00000010,
DRAW_BMP_REPEAT = 0x00000020,
DRAW_BMP_SMOOTH = 0x00000040,
};
struct DrawElement
{
uint8 mFlags;
uint8 mPrimType;
uint8 mBlendMode;
uint8 mScaleMode;
short mRadialPos;
uint8 mStride;
int mCount;
int mVertexOffset;
int mTexOffset;
int mColourOffset;
int mNormalOffset;
uint32 mColour;
Surface *mSurface;
// For ptLineStrip/ptLines
float mWidth;
};
typedef QuickVec<DrawElement> DrawElements;
class HardwareData
{
public:
HardwareData();
~HardwareData();
void releaseVbo();
float scaleOf(const RenderState &inState) const;
bool isScaleOk(const RenderState &inState) const;
void clear();
DrawElements mElements;
QuickVec<uint8> mArray;
float mMinScale;
float mMaxScale;
mutable class HardwareRenderer *mVboOwner;
mutable int mRendersWithoutVbo;
mutable unsigned int mVertexBo;
mutable int mContextId;
};
void ConvertOutlineToTriangles(Vertices &ioOutline,const QuickVec<int> &inSubPolys);
class HardwareContext : public Object
{
protected:
~HardwareContext() {}
public:
virtual bool IsOpenGL() const = 0;
virtual class Texture *CreateTexture(class Surface *inSurface, unsigned int inFlags)=0;
};
class HardwareRenderer : public HardwareContext
{
public:
static HardwareRenderer *current;
static HardwareRenderer *CreateOpenGL(void *inWindow, void *inGLCtx, bool shaders);
static HardwareRenderer *CreateDX11(void *inDevice, void *inContext);
virtual void OnContextLost() = 0;
// Could be common to multiple implementations...
virtual bool Hits(const RenderState &inState, const HardwareData &inData );
virtual void SetWindowSize(int inWidth,int inHeight)=0;
virtual void SetQuality(StageQuality inQuality)=0;
virtual void BeginRender(const Rect &inRect,bool inForHitTest)=0;
virtual void EndRender()=0;
virtual void SetViewport(const Rect &inRect)=0;
virtual void Clear(uint32 inColour,const Rect *inRect=0) = 0;
virtual void Flip() = 0;
virtual int Width() const = 0;
virtual int Height() const = 0;
virtual void Render(const RenderState &inState, const HardwareData &inData )=0;
virtual void BeginBitmapRender(Surface *inSurface,uint32 inTint=0,bool inRepeat=true,bool inSmooth=true)=0;
virtual void RenderBitmap(const Rect &inSrc, int inX, int inY)=0;
virtual void EndBitmapRender()=0;
virtual void BeginDirectRender()=0;
virtual void EndDirectRender()=0;
virtual void DestroyNativeTexture(void *inNativeTexture)=0;
virtual void DestroyTexture(unsigned int inTex)=0;
virtual void DestroyVbo(unsigned int inVbo)=0;
virtual void DestroyProgram(unsigned int inProg)=0;
virtual void DestroyShader(unsigned int inShader)=0;
virtual void DestroyFramebuffer(unsigned int inBuffer)=0;
virtual void DestroyRenderbuffer(unsigned int inBuffer)=0;
#ifdef NME_S3D
virtual void EndS3DRender()=0;
virtual void SetS3DEye(int eye)=0;
#endif
};
extern HardwareRenderer *gDirectRenderContext;
extern int gDirectMaxAttribArray;
void BuildHardwareJob(const class GraphicsJob &inJob,const GraphicsPath &inPath,
HardwareData &ioData, HardwareRenderer &inHardware,const RenderState &inState);
} // end namespace nme
#endif