Changed the type of fClipInfo from void * to glview_direct_info in the

BGLView header. This lets us get rid of ugly casting in the implementation.
Also changed a calloc() to malloc(), since the memory is memcpy()'d right
afterwards.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32763 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stefano Ceccherini
2009-08-27 20:25:40 +00:00
parent cbcc98ed56
commit e35a094d61
2 changed files with 15 additions and 22 deletions
+2 -1
View File
@@ -29,6 +29,7 @@
#include <Window.h> #include <Window.h>
#include <WindowScreen.h> #include <WindowScreen.h>
struct glview_direct_info;
class BGLRenderer; class BGLRenderer;
class GLRendererRoster; class GLRendererRoster;
@@ -102,7 +103,7 @@ private:
uint32 fDitherCount; uint32 fDitherCount;
BLocker fDrawLock; BLocker fDrawLock;
BLocker fDisplayLock; BLocker fDisplayLock;
void * fClipInfo; glview_direct_info * fClipInfo;
BGLRenderer *fRenderer; BGLRenderer *fRenderer;
GLRendererRoster *fRoster; GLRendererRoster *fRoster;
+13 -21
View File
@@ -76,7 +76,7 @@ BGLView::BGLView(BRect rect, char* name, ulong resizingMode, ulong mode,
BGLView::~BGLView() BGLView::~BGLView()
{ {
delete (glview_direct_info *)fClipInfo; delete fClipInfo;
if (fRenderer) if (fRenderer)
fRenderer->Release(); fRenderer->Release();
} }
@@ -213,10 +213,8 @@ BGLView::AttachedToWindow()
Bounds().IntegerHeight()); Bounds().IntegerHeight());
if (fClipInfo) { if (fClipInfo) {
fRenderer->DirectConnected( fRenderer->DirectConnected(fClipInfo->direct_info);
((glview_direct_info *)fClipInfo)->direct_info); fRenderer->EnableDirectMode(fClipInfo->enable_direct_mode);
fRenderer->EnableDirectMode(
((glview_direct_info *)fClipInfo)->enable_direct_mode);
} }
return; return;
@@ -337,17 +335,16 @@ void
BGLView::DirectConnected(direct_buffer_info *info) BGLView::DirectConnected(direct_buffer_info *info)
{ {
if (fClipInfo == NULL) { if (fClipInfo == NULL) {
fClipInfo = new(std::nothrow) glview_direct_info(); fClipInfo = new (std::nothrow) glview_direct_info();
if (fClipInfo == NULL) if (fClipInfo == NULL)
return; return;
} }
glview_direct_info *glviewDirectInfo = (glview_direct_info *)fClipInfo; direct_buffer_info *localInfo = fClipInfo->direct_info;
direct_buffer_info *localInfo = glviewDirectInfo->direct_info;
switch (info->buffer_state & B_DIRECT_MODE_MASK) { switch (info->buffer_state & B_DIRECT_MODE_MASK) {
case B_DIRECT_START: case B_DIRECT_START:
glviewDirectInfo->direct_connected = true; fClipInfo->direct_connected = true;
memcpy(localInfo, info, DIRECT_BUFFER_INFO_AREA_SIZE); memcpy(localInfo, info, DIRECT_BUFFER_INFO_AREA_SIZE);
_UnlockDraw(); _UnlockDraw();
break; break;
@@ -359,7 +356,7 @@ BGLView::DirectConnected(direct_buffer_info *info)
break; break;
case B_DIRECT_STOP: case B_DIRECT_STOP:
glviewDirectInfo->direct_connected = false; fClipInfo->direct_connected = false;
_LockDraw(); _LockDraw();
break; break;
} }
@@ -375,21 +372,19 @@ BGLView::EnableDirectMode(bool enabled)
if (fRenderer) if (fRenderer)
fRenderer->EnableDirectMode(enabled); fRenderer->EnableDirectMode(enabled);
if (fClipInfo == NULL) { if (fClipInfo == NULL) {
fClipInfo = new(std::nothrow) glview_direct_info(); fClipInfo = new (std::nothrow) glview_direct_info();
if (fClipInfo == NULL) if (fClipInfo == NULL)
return; return;
} }
((glview_direct_info *)fClipInfo)->enable_direct_mode = enabled; fClipInfo->enable_direct_mode = enabled;
} }
void void
BGLView::_LockDraw() BGLView::_LockDraw()
{ {
glview_direct_info *info = (glview_direct_info *)fClipInfo; if (!fClipInfo || !fClipInfo->enable_direct_mode)
if (!info || !info->enable_direct_mode)
return; return;
fDrawLock.Lock(); fDrawLock.Lock();
@@ -399,9 +394,7 @@ BGLView::_LockDraw()
void void
BGLView::_UnlockDraw() BGLView::_UnlockDraw()
{ {
glview_direct_info *info = (glview_direct_info *)fClipInfo; if (!fClipInfo || !fClipInfo->enable_direct_mode)
if (!info || !info->enable_direct_mode)
return; return;
fDrawLock.Unlock(); fDrawLock.Unlock();
@@ -414,9 +407,8 @@ BGLView::_CallDirectConnected()
if (!fClipInfo) if (!fClipInfo)
return; return;
glview_direct_info *glviewDirectInfo = (glview_direct_info *)fClipInfo; direct_buffer_info *localInfo = fClipInfo->direct_info;
direct_buffer_info *localInfo = glviewDirectInfo->direct_info; direct_buffer_info *info = (direct_buffer_info *)malloc(
direct_buffer_info *info = (direct_buffer_info *)calloc(1,
DIRECT_BUFFER_INFO_AREA_SIZE); DIRECT_BUFFER_INFO_AREA_SIZE);
if (info == NULL) if (info == NULL)
return; return;