summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/haiku/swrast/SoftwareRast.h
diff options
context:
space:
mode:
authorAlexander von Gluck IV <[email protected]>2013-11-13 05:39:19 +0000
committerAlexander von Gluck IV <[email protected]>2013-11-13 10:41:10 -0600
commitdf91144a6d17f934ac5cccd63bca2f49e967708a (patch)
tree49874b5a73ac7c4d080713f5411567024936fac5 /src/mesa/drivers/haiku/swrast/SoftwareRast.h
parent9976a176ae62d53e8ad0c0f934d207e22ac41e85 (diff)
haiku: add swrast driver
* This is pretty small and upkeep should be minimal. * Currently fully working. * Cannidate for 10.0.0 branch Acked-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/mesa/drivers/haiku/swrast/SoftwareRast.h')
-rw-r--r--src/mesa/drivers/haiku/swrast/SoftwareRast.h96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/mesa/drivers/haiku/swrast/SoftwareRast.h b/src/mesa/drivers/haiku/swrast/SoftwareRast.h
new file mode 100644
index 00000000000..8ef84938d6c
--- /dev/null
+++ b/src/mesa/drivers/haiku/swrast/SoftwareRast.h
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2006-2012, Haiku, Inc. All rights reserved.
+ * Distributed under the terms of the MIT License.
+ *
+ * Authors:
+ * Jérôme Duval, [email protected]
+ * Philippe Houdoin, [email protected]
+ * Artur Wyszynski, [email protected]
+ */
+#ifndef MESASOFTWARERENDERER_H
+#define MESASOFTWARERENDERER_H
+
+
+#define HAIKU_SWRAST_RENDERBUFFER_CLASS 0x737752 // swR
+
+
+#include "GLRenderer.h"
+
+extern "C" {
+#include "context.h"
+#include "main/version.h"
+#include "swrast/s_chan.h"
+#include "swrast/s_context.h"
+}
+
+
+class MesaSoftwareRast : public BGLRenderer {
+public:
+ MesaSoftwareRast(BGLView* view,
+ ulong bgl_options,
+ BGLDispatcher* dispatcher);
+ virtual ~MesaSoftwareRast();
+
+ virtual void LockGL();
+ virtual void UnlockGL();
+
+ virtual void SwapBuffers(bool VSync = false);
+ virtual void Draw(BRect updateRect);
+ virtual status_t CopyPixelsOut(BPoint source, BBitmap* dest);
+ virtual status_t CopyPixelsIn(BBitmap* source, BPoint dest);
+ virtual void FrameResized(float width, float height);
+
+ virtual void EnableDirectMode(bool enabled);
+ virtual void DirectConnected(direct_buffer_info* info);
+
+private:
+ static const GLubyte* _GetString(gl_context* ctx, GLenum name);
+ void _CheckResize(GLuint newWidth, GLuint newHeight);
+ static void _UpdateState(gl_context* ctx, GLuint newState);
+ static void _Flush(gl_context *ctx);
+
+ struct swrast_renderbuffer* _NewRenderBuffer(bool front);
+ status_t _SetupRenderBuffer(struct gl_renderbuffer* rb,
+ color_space colorSpace);
+
+/* Mesa callbacks */
+ static void _RenderBufferDelete(struct gl_context *ctx,
+ struct gl_renderbuffer* rb);
+ static GLboolean _RenderBufferStorage(gl_context* ctx,
+ struct gl_renderbuffer* render,
+ GLenum internalFormat,
+ GLuint width, GLuint height);
+ static GLboolean _RenderBufferStorageMalloc(gl_context* ctx,
+ struct gl_renderbuffer* render,
+ GLenum internalFormat,
+ GLuint width, GLuint height);
+ static void _RenderBufferMap(gl_context *ctx,
+ struct gl_renderbuffer *rb,
+ GLuint x, GLuint y, GLuint w, GLuint h,
+ GLbitfield mode, GLubyte **mapOut,
+ GLint *rowStrideOut);
+
+ void _AllocateBitmap();
+ void _CopyToDirect();
+
+ BBitmap* fBitmap;
+ bool fDirectModeEnabled;
+ direct_buffer_info* fInfo;
+ BLocker fInfoLocker;
+ ulong fOptions;
+
+ gl_context* fContext;
+ gl_config* fVisual;
+
+ struct gl_framebuffer* fFrameBuffer;
+ struct swrast_renderbuffer* fFrontRenderBuffer;
+ struct swrast_renderbuffer* fBackRenderBuffer;
+
+ GLuint fWidth;
+ GLuint fHeight;
+ color_space fColorSpace;
+
+ void* fRowAddr[SWRAST_MAX_HEIGHT];
+};
+
+#endif // MESASOFTWARERENDERER_H