E2462: 'virtual' can only be used with non-template member functions.
I'm getting this error with C++ Builder for the following code
class RenderSystem
{
friend class RenderSystemOpenGL;
public:
virtual bool start(HDC hdc, const int width, const int height, const int bpp, const int depthBpp) = 0;
virtual void create(const int width, const int height, const int bpp, const int depthBpp, char caption[], bool fullScreen, bool vsync) = 0;
virtual void changeContext(HDC hdc, const int width, const int height) = 0;
virtual void resize(const int width, const int height)=0;
virtual void displayUpdate(float elapsedTime)=0;
virtual void release() = 0;
virtual void exit() = 0;
public:
virtual void getVideoInfo() = 0;
public:
virtual void setMousePosition(const int x, const int y) = 0;
virtual void getMousePosition(int &x, int &y) = 0;
virtual void getWorldCoordinates(const int x, const int y, double *worldX, double *worldY, double *worldZ) = 0;
virtual void getScreenCoordinates(const double x, const double y, const double z, double *screenX, double *screenY, double *screenZ) = 0;
virtual void getScreenData(const int x, const int y, int type, void *data) = 0;
virtual double getWorldScaleFromScreenSpace(int pixelCount, double z) = 0;
public:
virtual void setMatrixMode(int mode) = 0;
virtual int getMatrixMode() = 0;
virtual void getMatrix(float m[16]) = 0;
virtual void pushMatrix() = 0;
virtual void popMatrix() = 0;
virtual void loadIdentityMatrix() = 0;
virtual void loadMatrix(float m[16]) = 0;
virtual void rotateMatrix(float angle, float x, float y, float z) = 0;
virtual void translateMatrix(float x, float y, float z) = 0;
virtual void scaleMatrix(float x, float y, float z) = 0;
virtual void multiplyMatrix(float m[16]) = 0;
virtual void lookAt(float x, float y, float z, float ux, float uy, float uz, float upx, float upy, float upz) = 0;
virtual void perspectiveMatrix(float fov, float nearClip, float farClip) = 0;
virtual void orthogonalMatrix(float left, float top, float right, float bottom, float nearClip, float farClip) = 0;
public:
virtual void applyCamera(Camera *camera) = 0;
public:
virtual int getFPS() = 0;
public:
virtual void clearColor( unsigned int color ) = 0;
virtual void clear( int clearMode ) = 0;
virtual void setFogMode(int mode) = 0;
virtual void setFogStart(float start) = 0;
virtual void setFogEnd(float end) = 0;
virtual void setFogDensity(float density) = 0;
virtual void setFogColor(float r, float g, float b) = 0;
virtual void setLight(int index, bool enable) = 0;
virtual void setLightPosition(float x, float y, float z, float w) = 0;
virtual void setLightAmbientColor(float r, float g, float b) = 0;
virtual void setLightDiffuseColor(float r, float g, float b) = 0;
public:
virtual void setColorMaterialState(int face, int mode) = 0;
virtual void setMaterialState(int face, int mode, float *values) = 0;
public:
virtual void beginPrimitiveRender(int state) = 0;
virtual void endPrimitiveRender() = 0;
virtual void renderVertex2(float x, float y) = 0;
virtual void renderVertex3(float x, float y, float z) = 0;
virtual void renderColor3(float r, float g, float b) = 0;
virtual void renderColor4(float r, float g, float b, float a) = 0;
virtual void renderTexCoord2(float u, float v) = 0;
virtual void renderNormal3(float x, float y, float z) = 0;
public:
virtual Texture *createTexture() = 0;
virtual Texture *createTexture(char *filename, int filter=RENDERSYSTEM::LINEAR, bool clamp=false, bool compressed=false) = 0;
virtual Texture *createTexture(Image *image, int filter=RENDERSYSTEM::LINEAR, bool clamp=false, bool compressed=false) = 0;
virtual Texture *createTexture(unsigned char *buffer, int width, int height, int bpp, int filter=0, bool clamp=false, bool compressed=false) = 0;
virtual void setTextureStage(int stage, bool enable=true) = 0;
virtual void setTextureState(int paramName, int paramValue) = 0;
virtual void setTextureState(int paramName, float *paramValue) = 0;
virtual void setTextureState(int param0, int param1, void *param2) = 0;
virtual void setTexture(Texture *texture) = 0;
virtual void copyToTexture(Texture *texture) = 0;
public:
virtual void pushRenderState(int state) = 0;
virtual void popRenderState() = 0;
virtual bool getRenderState(int state) = 0;
virtual void setRenderState(int state, bool enable) = 0;
virtual void setRenderState(int state, float *value) = 0;
virtual void setBlendState(int blendSrc, int blendDst) = 0;
virtual void setAlphaState(int mode, float value) = 0;
virtual void setCullState(int mode) = 0;
public:
virtual void beginScene( ) = 0;
virtual void endScene( ) = 0;
public:
virtual DataBuffer *createDataBuffer(const bool dynamic, const int size) = 0;
virtual void bindDataBuffer(int mode, DataBuffer *buffer, int param = 0) = 0;
virtual void renderDataBuffer(int mode, DataBuffer *indices, int count) = 0;
public:
//virtual Shader *createShader(char *vp, char *ventry, char *fp, char *fentry) = 0;
public:
virtual TextureReflection *createTextureReflection(int size) = 0;
};
Specifically it goes to the first line of this section
public:
virtual Texture *createTexture() = 0;
virtual Texture *createTexture(char *filename, int filter=RENDERSYSTEM::LINEAR, bool clamp=false, bool compressed=false) = 0;
virtual Texture *createTexture(Image *image, int filter=RENDERSYSTEM::LINEAR, bool clamp=false, bool compressed=false) = 0;
virtual Texture *createTexture(unsigned char *buffer, int width, int height, int bpp, int filter=0, bool clamp=false, bool compressed=false) = 0;
virtual void setTextureStage(int stage, bool enable=true) = 0;
virtual void setTextureState(int paramName, int paramValue) = 0;
virtual void setTextureState(int paramName, float *paramValue) = 0;
virtual void setTextureState(int param0, int param1, void *param2) = 0;
virtual void setTexture(Texture *texture) = 0;
virtual void copyToTexture(Texture *texture) = 0;
Now Texture is another abstract class that is replaced by TextureOpenGL and TextureDirectX. This was all compiling fine before a few minutes ago and now its giving me this. Any ideas ?