libglvnd: Bump patchset to latest revision

This commit is contained in:
Alexander von Gluck
2024-04-11 12:44:20 -05:00
parent 534745934b
commit 0bd075eb43
2 changed files with 55 additions and 37 deletions

View File

@@ -4,7 +4,7 @@ pipeline."
HOMEPAGE="http://gitlab.freedesktop.org/glvnd/libglvnd"
COPYRIGHT="2013, NVIDIA CORPORATION"
LICENSE="MIT"
REVISION="3"
REVISION="4"
SOURCE_URI="https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v$portVersion/libglvnd-v$portVersion.tar.gz"
SOURCE_DIR="libglvnd-v$portVersion"
CHECKSUM_SHA256="2b6e15b06aafb4c0b6e2348124808cbd9b291c647299eaaba2e3202f51ff2f3d"

View File

@@ -1,67 +1,79 @@
From 459bf13875768bac1b93203ec5454808c9a7aae4 Mon Sep 17 00:00:00 2001
From 9d7f6af5dd7e6e2976c43968757c7037f813b55f Mon Sep 17 00:00:00 2001
From: Alexander von Gluck <alex@terarocket.io>
Date: Tue, 9 Apr 2024 07:52:08 -0500
Subject: [PATCH] Haiku: guard calls to fRenderer in HGL
* Prevents dereferencing fRenderer when an EGL renderer is not found
* Add nice error text back to OpenGL view to give the user some feedback
---
src/HGL/GLView.cpp | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
src/HGL/GLView.cpp | 32 ++++++++++++++++++++++----------
1 file changed, 22 insertions(+), 10 deletions(-)
diff --git a/src/HGL/GLView.cpp b/src/HGL/GLView.cpp
index 3719522..027a78c 100644
index 3719522..e0430cb 100644
--- a/src/HGL/GLView.cpp
+++ b/src/HGL/GLView.cpp
@@ -327,7 +327,11 @@ BGLView::~BGLView()
void
@@ -328,7 +328,8 @@ void
BGLView::LockGL()
{
+ if (fRenderer == NULL)
+ return;
+
fDisplayLock.Lock();
- if (fDisplayLock.CountLocks() == 1) {
+
if (fDisplayLock.CountLocks() == 1) {
+ if (fRenderer != NULL && fDisplayLock.CountLocks() == 1) {
fRenderer->display->eglMakeCurrent(fRenderer->display->eglDpy, fRenderer->eglSurf,
fRenderer->eglSurf, fRenderer->eglCtx);
@@ -337,6 +341,9 @@ BGLView::LockGL()
void
BGLView::UnlockGL()
{
+ if (fRenderer == NULL)
+ return;
+
thread_id lockerThread = fDisplayLock.LockingThread();
thread_id callerThread = find_thread(NULL);
}
@@ -345,7 +346,7 @@ BGLView::UnlockGL()
(int)lockerThread, (int)callerThread);
}
@@ -362,6 +369,8 @@ void
- if (fDisplayLock.CountLocks() == 1) {
+ if (fRenderer != NULL && fDisplayLock.CountLocks() == 1) {
fRenderer->display->eglMakeCurrent(fRenderer->display->eglDpy, EGL_NO_SURFACE,
EGL_NO_SURFACE, EGL_NO_CONTEXT);
}
@@ -362,7 +363,8 @@ void
BGLView::SwapBuffers(bool vSync)
{
_LockDraw();
+ if (fRenderer == NULL)
+ return;
fRenderer->SwapBuffers();
- fRenderer->SwapBuffers();
+ if (fRenderer != NULL)
+ fRenderer->SwapBuffers();
_UnlockDraw();
}
@@ -376,6 +385,8 @@ BGLView::EmbeddedView()
@@ -376,7 +378,9 @@ BGLView::EmbeddedView()
void*
BGLView::GetGLProcAddress(const char* procName)
{
+ if (fRenderer == NULL)
+ return NULL;
return (void*)fRenderer->display->eglGetProcAddress(procName);
- return (void*)fRenderer->display->eglGetProcAddress(procName);
+ if (fRenderer != NULL)
+ return (void*)fRenderer->display->eglGetProcAddress(procName);
+ return NULL;
}
@@ -416,7 +427,7 @@ BGLView::Draw(BRect updateRect)
status_t
@@ -415,12 +419,17 @@ void
BGLView::Draw(BRect updateRect)
{
BRegion region(updateRect);
PthreadMutexLocker lock(&fRenderer->fLock);
- PthreadMutexLocker lock(&fRenderer->fLock);
- if (fRenderer->fBitmap.IsSet()) {
+ if (fRenderer != NULL && fRenderer->fBitmap.IsSet()) {
+ PthreadMutexLocker lock(&fRenderer->fLock);
DrawBitmap(fRenderer->fBitmap.Get(), B_ORIGIN);
region.Exclude(fRenderer->fBitmap->Bounds());
}
@@ -428,7 +439,7 @@ BGLView::AttachedToWindow()
FillRegion(&region, B_SOLID_LOW);
+
+ if (fRenderer == NULL) {
+ MovePenTo(8, 32);
+ DrawString("No EGL renderer available!");
+ }
}
void
@@ -428,7 +437,7 @@ BGLView::AttachedToWindow()
{
BView::AttachedToWindow();
@@ -70,16 +82,22 @@ index 3719522..027a78c 100644
PthreadMutexLocker lock(&fRenderer->fLock);
fRenderer->width = Bounds().IntegerWidth() + 1;
fRenderer->height = Bounds().IntegerHeight() + 1;
@@ -462,6 +473,9 @@ BGLView::EnableDirectMode(bool enabled)
@@ -462,9 +471,12 @@ BGLView::EnableDirectMode(bool enabled)
void BGLView::FrameResized(float width, float height)
{
BView::FrameResized(width, height);
- PthreadMutexLocker lock(&fRenderer->fLock);
- fRenderer->width = (uint32_t)width + 1;
- fRenderer->height = (uint32_t)height + 1;
+
+ if (fRenderer == NULL)
+ return;
PthreadMutexLocker lock(&fRenderer->fLock);
fRenderer->width = (uint32_t)width + 1;
fRenderer->height = (uint32_t)height + 1;
+ if (fRenderer != NULL) {
+ PthreadMutexLocker lock(&fRenderer->fLock);
+ fRenderer->width = (uint32_t)width + 1;
+ fRenderer->height = (uint32_t)height + 1;
+ }
}
--
2.43.2