More progress... sound is playing (no visuals yet)

This commit is contained in:
Simon 2022-09-22 23:23:00 +01:00
parent f894efd296
commit 8c62569139
14 changed files with 157 additions and 109 deletions

View file

@ -1354,7 +1354,7 @@ void JKVR_finishEyeBuffer(int eye )
ovrFramebuffer_SetNone();
}
bool JKVR_processMessageQueue() {
void JKVR_processMessageQueue() {
for ( ; ; )
{
ovrMessage message;
@ -1422,7 +1422,7 @@ bool JKVR_processMessageQueue() {
}
void showLoadingIcon();
void jni_shutdown();
extern "C" void jni_shutdown();
void JKVR_incrementFrameIndex();
void shutdownVR();
int VR_main( int argc, char* argv[] );
@ -1804,6 +1804,7 @@ Activity lifecycle
================================================================================
*/
extern "C" {
jmethodID android_shutdown;
static JavaVM *jVM;
@ -1834,7 +1835,7 @@ int JNI_OnLoad(JavaVM* vm, void* reserved)
return JNI_VERSION_1_4;
}
JNIEXPORT jlong JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onCreate( JNIEnv * env, jclass activityClass, jobject activity,
JNIEXPORT jlong JNICALL Java_com_drbeef_jkquest_GLES3JNILib_onCreate( JNIEnv * env, jclass activityClass, jobject activity,
jstring commandLineParams)
{
ALOGV( " GLES3JNILib::onCreate()" );
@ -1909,7 +1910,7 @@ JNIEXPORT jlong JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onCreate( JNIEnv *
}
JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onStart( JNIEnv * env, jobject obj, jlong handle, jobject obj1)
JNIEXPORT void JNICALL Java_com_drbeef_jkquest_GLES3JNILib_onStart( JNIEnv * env, jobject obj, jlong handle, jobject obj1)
{
ALOGV( " GLES3JNILib::onStart()" );
@ -1925,7 +1926,7 @@ JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onStart( JNIEnv * en
ovrMessageQueue_PostMessage( &appThread->MessageQueue, &message );
}
JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onResume( JNIEnv * env, jobject obj, jlong handle )
JNIEXPORT void JNICALL Java_com_drbeef_jkquest_GLES3JNILib_onResume( JNIEnv * env, jobject obj, jlong handle )
{
ALOGV( " GLES3JNILib::onResume()" );
ovrAppThread * appThread = (ovrAppThread *)((size_t)handle);
@ -1934,7 +1935,7 @@ JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onResume( JNIEnv * e
ovrMessageQueue_PostMessage( &appThread->MessageQueue, &message );
}
JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onPause( JNIEnv * env, jobject obj, jlong handle )
JNIEXPORT void JNICALL Java_com_drbeef_jkquest_GLES3JNILib_onPause( JNIEnv * env, jobject obj, jlong handle )
{
ALOGV( " GLES3JNILib::onPause()" );
ovrAppThread * appThread = (ovrAppThread *)((size_t)handle);
@ -1943,7 +1944,7 @@ JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onPause( JNIEnv * en
ovrMessageQueue_PostMessage( &appThread->MessageQueue, &message );
}
JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onStop( JNIEnv * env, jobject obj, jlong handle )
JNIEXPORT void JNICALL Java_com_drbeef_jkquest_GLES3JNILib_onStop( JNIEnv * env, jobject obj, jlong handle )
{
ALOGV( " GLES3JNILib::onStop()" );
ovrAppThread * appThread = (ovrAppThread *)((size_t)handle);
@ -1952,7 +1953,7 @@ JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onStop( JNIEnv * env
ovrMessageQueue_PostMessage( &appThread->MessageQueue, &message );
}
JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onDestroy( JNIEnv * env, jobject obj, jlong handle )
JNIEXPORT void JNICALL Java_com_drbeef_jkquest_GLES3JNILib_onDestroy( JNIEnv * env, jobject obj, jlong handle )
{
ALOGV( " GLES3JNILib::onDestroy()" );
ovrAppThread * appThread = (ovrAppThread *)((size_t)handle);
@ -1973,7 +1974,7 @@ Surface lifecycle
================================================================================
*/
JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onSurfaceCreated( JNIEnv * env, jobject obj, jlong handle, jobject surface )
JNIEXPORT void JNICALL Java_com_drbeef_jkquest_GLES3JNILib_onSurfaceCreated( JNIEnv * env, jobject obj, jlong handle, jobject surface )
{
ALOGV( " GLES3JNILib::onSurfaceCreated()" );
ovrAppThread * appThread = (ovrAppThread *)((size_t)handle);
@ -1996,7 +1997,7 @@ JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onSurfaceCreated( JN
ovrMessageQueue_PostMessage( &appThread->MessageQueue, &message );
}
JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onSurfaceChanged( JNIEnv * env, jobject obj, jlong handle, jobject surface )
JNIEXPORT void JNICALL Java_com_drbeef_jkquest_GLES3JNILib_onSurfaceChanged( JNIEnv * env, jobject obj, jlong handle, jobject surface )
{
ALOGV( " GLES3JNILib::onSurfaceChanged()" );
ovrAppThread * appThread = (ovrAppThread *)((size_t)handle);
@ -2038,7 +2039,7 @@ JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onSurfaceChanged( JN
}
}
JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onSurfaceDestroyed( JNIEnv * env, jobject obj, jlong handle )
JNIEXPORT void JNICALL Java_com_drbeef_jkquest_GLES3JNILib_onSurfaceDestroyed( JNIEnv * env, jobject obj, jlong handle )
{
ALOGV( " GLES3JNILib::onSurfaceDestroyed()" );
ovrAppThread * appThread = (ovrAppThread *)((size_t)handle);
@ -2050,3 +2051,5 @@ JNIEXPORT void JNICALL Java_com_drbeef_jk2quest_GLES3JNILib_onSurfaceDestroyed(
appThread->NativeWindow = NULL;
}
}

View file

@ -65,7 +65,7 @@ void JKVR_HapticEndFrame();
void JKVR_HapticStopEvent(const char* event);
void JKVR_HapticEnable();
void JKVR_HapticDisable();
bool JKVR_processMessageQueue();
void JKVR_processMessageQueue();
void JKVR_FrameSetup();
void JKVR_setUseScreenLayer(bool use);
void JKVR_processHaptics();

View file

@ -1,7 +1,7 @@
LOCAL_PATH := $(call my-dir)
JK3_BASE_CFLAGS = -O1 -DHAVE_GLES -DFINAL_BUILD -fexceptions -Wall -Wno-write-strings -Wno-comment -fno-caller-saves -fno-tree-vectorize -Wno-unused-but-set-variable
JK3_BASE_CFLAGS = -DHAVE_GLES -DFINAL_BUILD -fexceptions -Wall -Wno-write-strings -Wno-comment -fno-caller-saves -fno-tree-vectorize -Wno-unused-but-set-variable
JK3_BASE_CPPFLAGS = -fvisibility-inlines-hidden -Wno-invalid-offsetof
JK3_BASE_LDLIBS =

View file

@ -23,7 +23,7 @@ LOCAL_STATIC_LIBRARIES := sigc libzip libpng libminizip
LOCAL_SHARED_LIBRARIES := vrapi gl4es
LOCAL_C_INCLUDES := $(JK3_BASE_C_INCLUDES) $(TOP_DIR) $(GL4ES_PATH) $(GL4ES_PATH)/include $(SUPPORT_LIBS)/minizip/include $(SPDir)/rd-vanilla $(SPDir)/rd-common
LOCAL_C_INCLUDES := $(JK3_BASE_C_INCLUDES) $(TOP_DIR) $(TOP_DIR)/JKVR $(GL4ES_PATH) $(GL4ES_PATH)/include $(SUPPORT_LIBS)/minizip/include $(SPDir)/rd-vanilla $(SPDir)/rd-common
#############################################################################

View file

@ -297,10 +297,20 @@ void Sys_In_Restart_f( void )
#endif
}
void Sys_Init (void) {
void Sys_Init( void ) {
Cmd_AddCommand ("in_restart", Sys_In_Restart_f);
Cvar_Set( "arch", "arm" );
Cvar_Set( "username", Sys_GetCurrentUser( ) );
Cvar_Get( "arch", OS_STRING " " ARCH_STRING, CVAR_ROM );
Cvar_Get( "username", Sys_GetCurrentUser(), CVAR_ROM );
com_unfocused = Cvar_Get( "com_unfocused", "0", CVAR_ROM );
com_minimized = Cvar_Get( "com_minimized", "0", CVAR_ROM );
#ifdef _JK2EXE
com_maxfps = Cvar_Get ("com_maxfps", "125", CVAR_ARCHIVE );
#else
com_maxfps = Cvar_Get( "com_maxfps", "125", CVAR_ARCHIVE, "Maximum frames per second" );
#endif
com_maxfpsUnfocused = Cvar_Get( "com_maxfpsUnfocused", "0", CVAR_ARCHIVE_ND );
com_maxfpsMinimized = Cvar_Get( "com_maxfpsMinimized", "50", CVAR_ARCHIVE_ND );
}
void Sys_Exit( int ex ) __attribute__((noreturn));
@ -699,9 +709,13 @@ void *Sys_LoadDll( const char *name, qboolean useSystemLib )
if ( !*binarypath )
binarypath = ".";
char lib_path[512];
char *libdir = (char*)getenv("JK_LIBDIR");
const char *searchPaths[] = {
libdir,
binarypath,
basepath,
basepath
};
const size_t numPaths = ARRAY_LEN( searchPaths );
@ -712,7 +726,7 @@ void *Sys_LoadDll( const char *name, qboolean useSystemLib )
continue;
Com_Printf( "Trying to load \"%s\" from \"%s\"...\n", name, libDir );
char *fn = va( "%s%c%s", libDir, PATH_SEP, name );
char *fn = va( "%s%clib%s", libDir, PATH_SEP, name );
dllhandle = Sys_LoadLibrary( fn );
if ( dllhandle )
return dllhandle;
@ -749,7 +763,7 @@ void *Sys_LoadGameDll( const char *name, void *(QDECL **moduleAPI)(int, ...) )
char lib_path[512];
char *libdir = (char*)getenv("JK_GAMELIBDIR");
char *libdir = (char*)getenv("JK_LIBDIR");
sprintf(lib_path,"%s/lib%s", libdir,filename);
libHandle = dlopen (lib_path, RTLD_LAZY );

View file

@ -33,6 +33,7 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "qcommon/stringed_ingame.h"
#include "sys/sys_loadlib.h"
#include "qcommon/ojk_saved_game.h"
#include <JKVR/VrCommon.h>
#define RETRANSMIT_TIMEOUT 3000 // time between connection packet retransmits
@ -1072,12 +1073,7 @@ static CMiniHeap *GetG2VertSpaceServer( void ) {
return G2VertSpaceServer;
}
// NOTENOTE: If you change the output name of rd-vanilla, change this define too!
#ifdef JK2_MODE
#define DEFAULT_RENDER_LIBRARY "rdjosp-vanilla"
#else
#define DEFAULT_RENDER_LIBRARY "rdsp-vanilla"
#endif
#define DEFAULT_RENDER_LIBRARY "rd-gles"
void CL_InitRef( void ) {
refexport_t *ret;
@ -1187,6 +1183,8 @@ void CL_InitRef( void ) {
rit.saved_game = &ojk::SavedGame::get_instance();
rit.JKVR_prepareEyeBuffer = JKVR_prepareEyeBuffer;
ret = GetRefAPI( REF_API_VERSION, &rit );
if ( !ret ) {

View file

@ -28,6 +28,7 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
#include "client.h"
#include "client_ui.h"
#include <JKVR/VrCommon.h>
extern console_t con;
@ -498,19 +499,45 @@ void SCR_UpdateScreen( void ) {
// that case.
if ( cls.uiStarted )
{
// if running in stereo, we need to draw the frame twice
if ( cls.glconfig.stereoEnabled ) {
SCR_DrawScreenField( STEREO_LEFT );
SCR_DrawScreenField( STEREO_RIGHT );
} else {
SCR_DrawScreenField( STEREO_CENTER );
JKVR_FrameSetup();
JKVR_processMessageQueue();
//Get controller state here
JKVR_getHMDOrientation();
JKVR_getTrackedRemotesOrientation();
JKVR_processHaptics();
//Draw twice for Quest
SCR_DrawScreenField( STEREO_LEFT );
//This won't perform the submit eye buffers
{
if (com_speeds->integer) {
re.EndFrame(&time_frontend, &time_backend);
} else {
re.EndFrame(NULL, NULL);
}
}
JKVR_finishEyeBuffer(0);
SCR_DrawScreenField( STEREO_RIGHT );
//This will perform the submit eye buffers
if ( com_speeds->integer ) {
re.EndFrame( &time_frontend, &time_backend );
} else {
re.EndFrame( NULL, NULL );
}
JKVR_finishEyeBuffer(1);
//And we're done
re.SubmitStereoFrame();
recursive = 0;
}
recursive = 0;

View file

@ -127,6 +127,9 @@ typedef struct {
qboolean *(*gbAlreadyDoingLoad) ( void );
int (*com_frameTime) ( void );
//JKVR Functions
void (*JKVR_prepareEyeBuffer) (int eye );
} refimport_t;
extern refimport_t ri;
@ -202,6 +205,8 @@ typedef struct {
// if the pointers are not NULL, timing info will be returned
void (*EndFrame)( int *frontEndMsec, int *backEndMsec );
void ( *SubmitStereoFrame )( );
qboolean (*ProcessDissolve)(void);
qboolean (*InitDissolve)(qboolean bForceCircularExtroWipe);

View file

@ -1403,6 +1403,7 @@ const void *RB_DrawSurfs( const void *data ) {
return (const void *)(cmd + 1);
}
void JKVR_prepareEyeBuffer(int eye );
/*
=============
@ -1414,66 +1415,20 @@ const void *RB_DrawBuffer( const void *data ) {
const drawBufferCommand_t *cmd;
cmd = (const drawBufferCommand_t *)data;
/*
#ifndef HAVE_GLES
qglDrawBuffer( cmd->buffer );
#endif
*/
ri.JKVR_prepareEyeBuffer(cmd->buffer);
// clear screen for debugging
if (!( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) && tr.world && tr.refdef.rdflags & RDF_doLAGoggles)
{
const jk_fog_t *fog = &tr.world->fogs[tr.world->numfogs];
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
qglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
else if (!( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) && tr.world && tr.world->globalFog != -1 && tr.sceneCount)//don't clear during menus, wait for real scene
{
const jk_fog_t *fog = &tr.world->fogs[tr.world->globalFog];
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
else if ( r_clear->integer )
{ // clear screen for debugging
int i = r_clear->integer;
if (i == 42) {
i = Q_irand(0,8);
}
switch (i)
{
default:
qglClearColor( 1, 0, 0.5, 1 );
break;
case 1:
qglClearColor( 1.0, 0.0, 0.0, 1.0); //red
break;
case 2:
qglClearColor( 0.0, 1.0, 0.0, 1.0); //green
break;
case 3:
qglClearColor( 1.0, 1.0, 0.0, 1.0); //yellow
break;
case 4:
qglClearColor( 0.0, 0.0, 1.0, 1.0); //blue
break;
case 5:
qglClearColor( 0.0, 1.0, 1.0, 1.0); //cyan
break;
case 6:
qglClearColor( 1.0, 0.0, 1.0, 1.0); //magenta
break;
case 7:
qglClearColor( 1.0, 1.0, 1.0, 1.0); //white
break;
case 8:
qglClearColor( 0.0, 0.0, 0.0, 1.0); //black
break;
}
// clear screen for debugging
if ( r_clear->integer ) {
qglClearColor( 0, 0, 0, 1 );
qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
return (const void *)(cmd + 1);
return (const void *)( cmd + 1 );
}
/*
@ -1571,6 +1526,32 @@ void RB_ShowImages( void ) {
}
/*
=============
RB_Flush
=============
*/
const void *RB_Flush( const void *data ) {
const swapBuffersCommand_t *cmd;
// finish any 2D drawing if needed
if ( tess.numIndexes ) {
RB_EndSurface();
}
// texture swapping test
if ( r_showImages->integer ) {
RB_ShowImages();
}
cmd = (const swapBuffersCommand_t *)data;
backEnd.projection2D = qfalse;
return (const void *)( cmd + 1 );
}
/*
=============
RB_SwapBuffers
@ -1688,6 +1669,9 @@ void RB_ExecuteRenderCommands( const void *data ) {
case RC_WORLD_EFFECTS:
data = RB_WorldEffects( data );
break;
case RC_FLUSH:
data = RB_Flush( data );
break;
case RC_END_OF_LIST:
default:
// stop rendering

View file

@ -383,6 +383,7 @@ void RE_BeginFrame( stereoFrame_t stereoFrame ) {
//
// do overdraw measurement
//
#ifndef HAVE_GLES
if ( r_measureOverdraw->integer )
{
if ( glConfig.stencilBits < 4 )
@ -417,6 +418,7 @@ void RE_BeginFrame( stereoFrame_t stereoFrame ) {
r_measureOverdraw->modified = qfalse;
}
}
#endif
//
// texturemode stuff
@ -457,23 +459,13 @@ void RE_BeginFrame( stereoFrame_t stereoFrame ) {
}
cmd->commandId = RC_DRAW_BUFFER;
if ( glConfig.stereoEnabled ) {
{
if ( stereoFrame == STEREO_LEFT ) {
cmd->buffer = (int)0;
} else if ( stereoFrame == STEREO_RIGHT ) {
cmd->buffer = (int)1;
} else {
Com_Error( ERR_FATAL, "RE_BeginFrame: Stereo is enabled, but stereoFrame was %i", stereoFrame );
}
} else {
if ( stereoFrame != STEREO_CENTER ) {
Com_Error( ERR_FATAL, "RE_BeginFrame: Stereo is disabled, but stereoFrame was %i", stereoFrame );
}
// if ( !Q_stricmp( r_drawBuffer->string, "GL_FRONT" ) ) {
// cmd->buffer = (int)GL_FRONT;
// } else
{
cmd->buffer = (int)GL_BACK;
ri.Error( ERR_FATAL, "RE_BeginFrame: Stereo is enabled, but stereoFrame was %i", stereoFrame );
}
}
}
@ -487,26 +479,26 @@ Returns the number of msec spent in the back end
=============
*/
void RE_EndFrame( int *frontEndMsec, int *backEndMsec ) {
swapBuffersCommand_t *cmd;
swapBuffersCommand_t *cmd;
if ( !tr.registered ) {
return;
}
cmd = (swapBuffersCommand_t *) R_GetCommandBufferReserved( sizeof( *cmd ), 0 );
if ( !cmd ) {
cmd = (swapBuffersCommand_t*)R_GetCommandBuffer(sizeof(*cmd));
if (!cmd) {
return;
}
cmd->commandId = RC_SWAP_BUFFERS;
R_IssueRenderCommands( qtrue );
cmd->commandId = RC_FLUSH;
R_InitNextFrame();
R_IssueRenderCommands( qfalse );
if ( frontEndMsec ) {
if (frontEndMsec) {
*frontEndMsec = tr.frontEndMsec;
}
tr.frontEndMsec = 0;
if ( backEndMsec ) {
if (backEndMsec) {
*backEndMsec = backEnd.pc.msec;
}
backEnd.pc.msec = 0;
@ -516,3 +508,20 @@ void RE_EndFrame( int *frontEndMsec, int *backEndMsec ) {
styleUpdated[i] = false;
}
}
void RE_SubmitStereoFrame( ) {
swapBuffersCommand_t *cmd;
if ( !tr.registered ) {
return;
}
cmd = (swapBuffersCommand_t*)R_GetCommandBuffer(sizeof(*cmd));
if (!cmd) {
return;
}
cmd->commandId = RC_SWAP_BUFFERS;
R_IssueRenderCommands( qtrue );
}

View file

@ -324,6 +324,10 @@ void R_Splash()
static void GLW_InitTextureCompression( void )
{
glConfig.textureCompression = TC_NONE;
return;
bool newer_tc, old_tc;
// Check for available tc methods.
newer_tc = ri.GL_ExtensionSupported("GL_ARB_texture_compression") && ri.GL_ExtensionSupported("GL_EXT_texture_compression_s3tc");
@ -1564,7 +1568,7 @@ void R_Register( void )
//
r_allowExtensions = ri.Cvar_Get( "r_allowExtensions", "1", CVAR_ARCHIVE_ND | CVAR_LATCH );
r_ext_compressed_textures = ri.Cvar_Get( "r_ext_compress_textures", "1", CVAR_ARCHIVE_ND | CVAR_LATCH );
r_ext_compressed_textures = ri.Cvar_Get( "r_ext_compress_textures", "0", CVAR_ARCHIVE_ND | CVAR_LATCH );
r_ext_compressed_lightmaps = ri.Cvar_Get( "r_ext_compress_lightmaps", "0", CVAR_ARCHIVE_ND | CVAR_LATCH );
r_ext_preferred_tc_method = ri.Cvar_Get( "r_ext_preferred_tc_method", "0", CVAR_ARCHIVE_ND | CVAR_LATCH );
r_ext_gamma_control = ri.Cvar_Get( "r_ext_gamma_control", "1", CVAR_ARCHIVE_ND | CVAR_LATCH );
@ -2087,6 +2091,7 @@ extern "C" Q_EXPORT refexport_t* QDECL GetRefAPI ( int apiVersion, refimport_t *
REX(BeginFrame);
REX(EndFrame);
REX(SubmitStereoFrame);
REX(ProcessDissolve);
REX(InitDissolve);

View file

@ -1784,6 +1784,7 @@ typedef enum {
RC_DRAW_BUFFER,
RC_SWAP_BUFFERS,
RC_WORLD_EFFECTS,
RC_FLUSH
} renderCommand_t;
@ -1824,6 +1825,7 @@ void RE_LAGoggles( void );
void RE_Scissor ( float x, float y, float w, float h);
void RE_BeginFrame( stereoFrame_t stereoFrame );
void RE_EndFrame( int *frontEndMsec, int *backEndMsec );
void RE_SubmitStereoFrame( );
qboolean RE_ProcessDissolve(void);
qboolean RE_InitDissolve(qboolean bForceCircularExtroWipe);