/*
* Copyright 2006-2012, Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Jérôme Duval, korli@users.berlios.de
* Philippe Houdoin, philippe.houdoin@free.fr
* Artur Wyszynski, harakash@gmail.com
* Alexander von Gluck IV, kallisti5@unixzen.com
*/
#ifndef SOFTWARERENDERER_H
#define SOFTWARERENDERER_H
#include <kernel/image.h>
#include "GLRenderer.h"
#include "GalliumContext.h"
class SoftwareRenderer : public BGLRenderer {
public:
SoftwareRenderer(BGLView *view,
ulong bgl_options,
BGLDispatcher *dispatcher);
virtual ~SoftwareRenderer();
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:
void _AllocateBitmap();
GalliumContext* fContextObj;
BBitmap* fBitmap;
context_id fContextID;
bool fDirectModeEnabled;
direct_buffer_info* fInfo;
BLocker fInfoLocker;
ulong fOptions;
GLuint fWidth;
GLuint fHeight;
color_space fColorSpace;
};
#endif // SOFTPIPERENDERER_H