libretro / desmume

DeSmuME is a Nintendo DS emulator
http://desmume.org
GNU General Public License v2.0
35 stars 33 forks source link

GLES2 renderer #41

Open andres-asm opened 6 years ago

andres-asm commented 6 years ago

Seems there is a GLES2 renderer ready here: https://github.com/jquesnelle/nds4droid/blob/master/app/src/main/jni/desmume/src/OGLES2Render.cpp

Do you think it's possible to backport it?

bearoso commented 6 years ago

You mean forward-port it? It's outdated. It'd be easier to just tune up the existing parts, which are OpenGL-core-capable and it might not be much work at all.

andres-asm commented 6 years ago

Maybe, I'm not knowledgeable on OpenGL I did try to enable it for android:

--- a/desmume/src/frontend/libretro/jni/Android.mk
+++ b/desmume/src/frontend/libretro/jni/Android.mk
@@ -10,6 +10,7 @@ DESMUME_JIT_ARM := 0
 ifeq ($(TARGET_ARCH),arm)
   DESMUME_JIT_ARM := 1
   JIT             := -DHAVE_JIT
+  DESMUME_OPENGL_CORE := 1
 else ifeq ($(TARGET_ARCH),x86)
   DESMUME_JIT := 1
   JIT         := -DHAVE_JIT
@@ -17,7 +18,7 @@ endif

 include $(LIBRETRO_DIR)/Makefile.common

-COREFLAGS := -D__LIBRETRO__ -DANDROID $(INCDIR) $(JIT)
+COREFLAGS := -D__LIBRETRO__ -DANDROID $(INCDIR) $(JIT) -DHAVE_OPENGL

 GIT_VERSION := " $(shell git rev-parse --short HEAD || echo unknown)"
 ifneq ($(GIT_VERSION)," unknown")
@@ -29,6 +30,7 @@ LOCAL_MODULE       := retro
 LOCAL_SRC_FILES    := $(SOURCES_CXX) $(SOURCES_C)
 LOCAL_CXXFLAGS     := $(COREFLAGS)
 LOCAL_CFLAGS       := $(COREFLAGS)
+LOCAL_LDLIBS := -lGLESv2
 LOCAL_LDFLAGS      := -Wl,-version-script=$(LIBRETRO_DIR)/link.T
 LOCAL_CPP_FEATURES := exceptions
 include $(BUILD_SHARED_LIBRARY)

Ton and tons of errors though :P https://hastebin.com/hiborutizi.coffeescript

andres-asm commented 6 years ago
index 39a60a3..ce54fad 100644
--- a/desmume/src/frontend/libretro/jni/Android.mk
+++ b/desmume/src/frontend/libretro/jni/Android.mk
@@ -10,6 +10,8 @@ DESMUME_JIT_ARM := 0
 ifeq ($(TARGET_ARCH),arm)
   DESMUME_JIT_ARM := 1
   JIT             := -DHAVE_JIT
+DESMUME_OPENGL := 1
+  DESMUME_OPENGL_CORE := 1
 else ifeq ($(TARGET_ARCH),x86)
   DESMUME_JIT := 1
   JIT         := -DHAVE_JIT
@@ -17,7 +19,7 @@ endif

 include $(LIBRETRO_DIR)/Makefile.common

-COREFLAGS := -D__LIBRETRO__ -DANDROID $(INCDIR) $(JIT)
+COREFLAGS := -D__LIBRETRO__ -DANDROID $(INCDIR) $(JIT) -DHAVE_OPENGL

 GIT_VERSION := " $(shell git rev-parse --short HEAD || echo unknown)"
 ifneq ($(GIT_VERSION)," unknown")
@@ -29,6 +31,7 @@ LOCAL_MODULE       := retro
 LOCAL_SRC_FILES    := $(SOURCES_CXX) $(SOURCES_C)
 LOCAL_CXXFLAGS     := $(COREFLAGS)
 LOCAL_CFLAGS       := $(COREFLAGS)
+LOCAL_LDLIBS := -lEGL -lGLESv2
 LOCAL_LDFLAGS      := -Wl,-version-script=$(LIBRETRO_DIR)/link.T
 LOCAL_CPP_FEATURES := exceptions
 include $(BUILD_SHARED_LIBRARY)

Ok less errors now

[armeabi-v7a] SharedLibrary  : libretro.so
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:2065: error: undefined reference to 'glActiveTextureARB'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:2072: error: undefined reference to 'glActiveTextureARB'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:2141: error: undefined reference to 'glActiveTextureARB'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:2148: error: undefined reference to 'glActiveTextureARB'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:2770: error: undefined reference to 'glDrawBuffer'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:2773: error: undefined reference to 'glReadBuffer'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:2796: error: undefined reference to 'glDrawBuffer'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:2799: error: undefined reference to 'glReadBuffer'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:2818: error: undefined reference to 'glDrawBuffer'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:2819: error: undefined reference to 'glReadBuffer'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:2835: error: undefined reference to 'glDrawBuffer'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:2836: error: undefined reference to 'glReadBuffer'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3400: error: undefined reference to 'glTexImage1D'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3500: error: undefined reference to 'glEnableClientState'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3501: error: undefined reference to 'glEnableClientState'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3502: error: undefined reference to 'glEnableClientState'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3507: error: undefined reference to 'glColorPointer'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3512: error: undefined reference to 'glColorPointer'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3515: error: undefined reference to 'glVertexPointer'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3516: error: undefined reference to 'glTexCoordPointer'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3539: error: undefined reference to 'glDisableClientState'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3540: error: undefined reference to 'glDisableClientState'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3541: error: undefined reference to 'glDisableClientState'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3844: error: undefined reference to 'glAlphaFunc'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3847: error: undefined reference to 'glMatrixMode'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:3848: error: undefined reference to 'glLoadIdentity'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:4225: error: undefined reference to 'glTexSubImage1D'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:4341: error: undefined reference to 'glClearDepth'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:4366: error: undefined reference to 'glClearDepth'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:4474: error: undefined reference to 'glTexEnvi'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:4513: error: undefined reference to 'glMatrixMode'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:4514: error: undefined reference to 'glLoadIdentity'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:4515: error: undefined reference to 'glScalef'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:4726: error: undefined reference to 'glAlphaFunc'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:200: error: undefined reference to 'glXGetProcAddress'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:201: error: undefined reference to 'glXGetProcAddress'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:203: error: undefined reference to 'glXGetProcAddress'
/mnt/e/Tools/msys64/home/Andres/repositories/cores/desmume/desmume/src/frontend/libretro/jni/../../../OGLRender.cpp:204: error: undefined reference to 'glXGetProcAddress'
bearoso commented 6 years ago

That’s... not too bad. Most of that is just part of the fixed function driver that wouldn’t run on the programmable codepath, so it could be ifdefed out. Don’t know about the 1d textures, but they can be emulated with 2d textures. The framebuffer functions are a bad loss, though. I wasn’t aware they were es 3.0 only.