mirror of
https://github.com/lindbergh-loader/lindbergh-loader.git
synced 2026-10-14 01:49:12 +03:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
527bdc418f | ||
|
|
a3e3f51003 | ||
|
|
a96b1fcf30 | ||
|
|
6e751f16f0 |
@@ -40,9 +40,6 @@ jobs:
|
|||||||
NEW_RUN_NUMBER=$(( ${{ github.run_number }} + 161 ))
|
NEW_RUN_NUMBER=$(( ${{ github.run_number }} + 161 ))
|
||||||
echo "NEW_RUN_NUMBER=$NEW_RUN_NUMBER" >> $GITHUB_ENV
|
echo "NEW_RUN_NUMBER=$NEW_RUN_NUMBER" >> $GITHUB_ENV
|
||||||
|
|
||||||
# - name: Display Updated Number
|
|
||||||
# run: echo "Updated Run Number: ${{ env.NEW_RUN_NUMBER }}"
|
|
||||||
|
|
||||||
- name: Create Preview Release
|
- name: Create Preview Release
|
||||||
if: github.ref == 'refs/heads/master'
|
if: github.ref == 'refs/heads/master'
|
||||||
uses: "marvinpinto/action-automatic-releases@latest"
|
uses: "marvinpinto/action-automatic-releases@latest"
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## [2.0.5]
|
||||||
|
### Fixed
|
||||||
|
- Fixed LGJ, VT3 and ID4/ID5 JVS passthrough.
|
||||||
|
|
||||||
## [2.0.4]
|
## [2.0.4]
|
||||||
### Added
|
### Added
|
||||||
- Boost render res option for Rambo, LGJ, HOD4, HOD-EX, ID4/ID5, 2Spicy and Harley.
|
- Boost render res option for Rambo, LGJ, HOD4, HOD-EX, ID4/ID5, 2Spicy and Harley.
|
||||||
|
|||||||
@@ -90,6 +90,10 @@ sudo ln -s /lib/i386-linux-gnu/libglut.so /lib/i386-linux-gnu/libglut.so.3
|
|||||||
|
|
||||||
- You need to set `SKIP_OUTRUN_CABINET_CHECK` to 1 in `lindbergh.conf` to play in DX, SDX or Standard cabinet types.
|
- You need to set `SKIP_OUTRUN_CABINET_CHECK` to 1 in `lindbergh.conf` to play in DX, SDX or Standard cabinet types.
|
||||||
|
|
||||||
|
### Hummer (all versions)
|
||||||
|
|
||||||
|
The games will ask for libGLcore.so.1 and libnvidia-tls.so.1 you can copy for example libkswapapi.so as libGLcore.so.1 and libnvidia-tls.so.1 and the game will work fine.
|
||||||
|
|
||||||
## Configuration File : lindbergh.conf
|
## Configuration File : lindbergh.conf
|
||||||
|
|
||||||
All configurable options are set and explained in the [`lindbergh.conf`](lindbergh.conf) file itself, and should be reasonably easy to understand. This chapter further explains some of those setup options.
|
All configurable options are set and explained in the [`lindbergh.conf`](lindbergh.conf) file itself, and should be reasonably easy to understand. This chapter further explains some of those setup options.
|
||||||
|
|||||||
+16
-131
@@ -922,11 +922,6 @@ static ControllerStatus listControllers(Controllers *controllers)
|
|||||||
strcat(controllerInput->inputName, "_");
|
strcat(controllerInput->inputName, "_");
|
||||||
strcat(controllerInput->inputName, codename(EV_KEY, code));
|
strcat(controllerInput->inputName, codename(EV_KEY, code));
|
||||||
normaliseName(controllerInput->inputName);
|
normaliseName(controllerInput->inputName);
|
||||||
if (snprintf(controllerInput->inputTechName, SIZE, "%s:KEY:%i", controllers->controller[i].path, code) >= 1024)
|
|
||||||
{
|
|
||||||
// hum ok, truncated value
|
|
||||||
}
|
|
||||||
strcpy(controllerInput->inputTechNegName, "-"); // unassignable value (not "" while some conf are empty)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -948,14 +943,6 @@ static ControllerStatus listControllers(Controllers *controllers)
|
|||||||
strcat(controllerInput->inputName, "_");
|
strcat(controllerInput->inputName, "_");
|
||||||
strcat(controllerInput->inputName, codename(EV_ABS, code));
|
strcat(controllerInput->inputName, codename(EV_ABS, code));
|
||||||
normaliseName(controllerInput->inputName);
|
normaliseName(controllerInput->inputName);
|
||||||
if (snprintf(controllerInput->inputTechName, SIZE, "%s:ABS:%i", controllers->controller[i].path, code) >= 1024)
|
|
||||||
{
|
|
||||||
// hum ok, truncated value
|
|
||||||
}
|
|
||||||
if (snprintf(controllerInput->inputTechNegName, SIZE, "%s:ABS_NEG:%i", controllers->controller[i].path, code) >= 1024)
|
|
||||||
{
|
|
||||||
// hum ok, truncated value
|
|
||||||
}
|
|
||||||
|
|
||||||
ControllerInput *minControllerInput =
|
ControllerInput *minControllerInput =
|
||||||
&controllers->controller[i].inputs[controllers->controller[i].inputCount++];
|
&controllers->controller[i].inputs[controllers->controller[i].inputCount++];
|
||||||
@@ -964,15 +951,6 @@ static ControllerStatus listControllers(Controllers *controllers)
|
|||||||
minControllerInput->specialFunction = ANALOGUE_TO_DIGITAL_MIN;
|
minControllerInput->specialFunction = ANALOGUE_TO_DIGITAL_MIN;
|
||||||
strcpy(minControllerInput->inputName, controllerInput->inputName);
|
strcpy(minControllerInput->inputName, controllerInput->inputName);
|
||||||
strcat(minControllerInput->inputName, "_MIN");
|
strcat(minControllerInput->inputName, "_MIN");
|
||||||
if (snprintf(minControllerInput->inputTechName, SIZE, "%s:ABS:%i:MIN", controllers->controller[i].path, code) >= 1024)
|
|
||||||
{
|
|
||||||
// hum ok, truncated value
|
|
||||||
}
|
|
||||||
if (snprintf(minControllerInput->inputTechNegName, SIZE, "%s:ABS_NEG:%i:MIN", controllers->controller[i].path, code) >=
|
|
||||||
1024)
|
|
||||||
{
|
|
||||||
// hum ok, truncated value
|
|
||||||
}
|
|
||||||
|
|
||||||
ControllerInput *maxControllerInput =
|
ControllerInput *maxControllerInput =
|
||||||
&controllers->controller[i].inputs[controllers->controller[i].inputCount++];
|
&controllers->controller[i].inputs[controllers->controller[i].inputCount++];
|
||||||
@@ -981,27 +959,6 @@ static ControllerStatus listControllers(Controllers *controllers)
|
|||||||
maxControllerInput->specialFunction = ANALOGUE_TO_DIGITAL_MAX;
|
maxControllerInput->specialFunction = ANALOGUE_TO_DIGITAL_MAX;
|
||||||
strcpy(maxControllerInput->inputName, controllerInput->inputName);
|
strcpy(maxControllerInput->inputName, controllerInput->inputName);
|
||||||
strcat(maxControllerInput->inputName, "_MAX");
|
strcat(maxControllerInput->inputName, "_MAX");
|
||||||
if (snprintf(maxControllerInput->inputTechName, SIZE, "%s:ABS:%i:MAX", controllers->controller[i].path, code) >= 1024)
|
|
||||||
{
|
|
||||||
// hum ok, truncated value
|
|
||||||
}
|
|
||||||
if (snprintf(maxControllerInput->inputTechNegName, SIZE, "%s:ABS_NEG:%i:MAX", controllers->controller[i].path, code) >=
|
|
||||||
1024)
|
|
||||||
{
|
|
||||||
// hum ok, truncated value
|
|
||||||
}
|
|
||||||
|
|
||||||
ControllerInput *shakeControllerInput = &controllers->controller[i].inputs[controllers->controller[i].inputCount++];
|
|
||||||
shakeControllerInput->evType = EV_ABS;
|
|
||||||
shakeControllerInput->evCode = code;
|
|
||||||
shakeControllerInput->specialFunction = ANALOGUE_SHAKE;
|
|
||||||
strcpy(shakeControllerInput->inputName, controllerInput->inputName);
|
|
||||||
strcat(shakeControllerInput->inputName, "_SHAKE");
|
|
||||||
if (snprintf(shakeControllerInput->inputTechName, SIZE, "%s:ABS:%i:SHAKE", controllers->controller[i].path, code) >=
|
|
||||||
1024)
|
|
||||||
{
|
|
||||||
// hum ok, truncated value
|
|
||||||
}
|
|
||||||
|
|
||||||
struct input_absinfo absoluteFeatures;
|
struct input_absinfo absoluteFeatures;
|
||||||
ioctl(controller, EVIOCGABS(code), &absoluteFeatures);
|
ioctl(controller, EVIOCGABS(code), &absoluteFeatures);
|
||||||
@@ -1109,67 +1066,31 @@ void *controllerThread(void *_args)
|
|||||||
((double)event.value - (double)args->controller->absMin[event.code]) /
|
((double)event.value - (double)args->controller->absMin[event.code]) /
|
||||||
((double)args->controller->absMax[event.code] - (double)args->controller->absMin[event.code]);
|
((double)args->controller->absMax[event.code] - (double)args->controller->absMin[event.code]);
|
||||||
|
|
||||||
if(args->controller->absTriggers[event.code].isNeg == 1) {
|
|
||||||
scaled = 1.0 - scaled;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args->controller->absTriggers[event.code].enabled)
|
if (args->controller->absTriggers[event.code].enabled)
|
||||||
{
|
{
|
||||||
int channel = args->controller->absTriggers[event.code].channel;
|
int channel = args->controller->absTriggers[event.code].channel;
|
||||||
|
// Deadzone handling
|
||||||
if (args->controller->absTriggers[event.code].isAnalogue) {
|
if (scaled < analogue_deadzones[channel].start_max)
|
||||||
// Deadzone handling
|
|
||||||
if (scaled < analogue_deadzones[channel].start_max)
|
|
||||||
scaled = 0.0;
|
scaled = 0.0;
|
||||||
if (scaled > analogue_deadzones[channel].middle_min && scaled < analogue_deadzones[channel].middle_max)
|
if (scaled > analogue_deadzones[channel].middle_min && scaled < analogue_deadzones[channel].middle_max)
|
||||||
scaled = 0.5;
|
scaled = 0.5;
|
||||||
if (scaled > analogue_deadzones[channel].end_min)
|
if (scaled > analogue_deadzones[channel].end_min)
|
||||||
scaled = 1.0;
|
scaled = 1.0;
|
||||||
setAnalogue(channel, scaled * (pow(2, jvsBits) - 1));
|
|
||||||
} else {
|
setAnalogue(channel, scaled * (pow(2, jvsBits) - 1));
|
||||||
setSwitch(args->controller->absTriggers[event.code].player,
|
|
||||||
args->controller->absTriggers[event.code].channel, scaled < 0.8 ? 0 : 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(event.value <= ((args->controller->absMin[event.code] + args->controller->absMax[event.code]) / 2)) {
|
if (args->controller->absTriggers[event.code].minEnabled)
|
||||||
if (args->controller->absTriggers[event.code].minEnabled)
|
{
|
||||||
{
|
setSwitch(args->controller->absTriggers[event.code].minPlayer,
|
||||||
int channel = args->controller->absTriggers[event.code].minChannel;
|
args->controller->absTriggers[event.code].minChannel, scaled < 0.2);
|
||||||
|
|
||||||
if (args->controller->absTriggers[event.code].isAnalogue) {
|
|
||||||
setAnalogue(channel, scaled < 0.2 ? 0.0 : pow(2, jvsBits) * 1.0);
|
|
||||||
} else {
|
|
||||||
setSwitch(args->controller->absTriggers[event.code].minPlayer,
|
|
||||||
args->controller->absTriggers[event.code].minChannel, scaled < 0.2 ? 1 : 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(event.value >= ((args->controller->absMin[event.code] + args->controller->absMax[event.code]) / 2)) {
|
if (args->controller->absTriggers[event.code].maxEnabled)
|
||||||
if (args->controller->absTriggers[event.code].maxEnabled)
|
{
|
||||||
{
|
setSwitch(args->controller->absTriggers[event.code].maxPlayer,
|
||||||
int channel = args->controller->absTriggers[event.code].maxChannel;
|
args->controller->absTriggers[event.code].maxChannel, scaled > 0.8);
|
||||||
|
|
||||||
if (args->controller->absTriggers[event.code].isAnalogue) {
|
|
||||||
setAnalogue(channel, scaled > 0.8 ? pow(2, jvsBits) : 0.0);
|
|
||||||
} else {
|
|
||||||
setSwitch(args->controller->absTriggers[event.code].maxPlayer,
|
|
||||||
args->controller->absTriggers[event.code].maxChannel, scaled > 0.8 ? 1 : 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (args->controller->absTriggers[event.code].shakeEnabled)
|
|
||||||
{
|
|
||||||
int channel = args->controller->absTriggers[event.code].shakeChannel;
|
|
||||||
if( (scaled > args->controller->absTriggers[event.code].shakePreviousScaled && scaled - args->controller->absTriggers[event.code].shakePreviousScaled > 0.1) ||
|
|
||||||
(scaled < args->controller->absTriggers[event.code].shakePreviousScaled && -scaled + args->controller->absTriggers[event.code].shakePreviousScaled > 0.1)) {
|
|
||||||
setAnalogue(channel, 0);
|
|
||||||
} else {
|
|
||||||
setAnalogue(channel, pow(2, jvsBits) / 2);
|
|
||||||
}
|
|
||||||
args->controller->absTriggers[event.code].shakePreviousScaled = scaled;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1322,9 +1243,6 @@ ControllerStatus startControllerThreads(Controllers *controllers)
|
|||||||
controllers->controller[i].absTriggers[j].enabled = 0;
|
controllers->controller[i].absTriggers[j].enabled = 0;
|
||||||
controllers->controller[i].absTriggers[j].minEnabled = 0;
|
controllers->controller[i].absTriggers[j].minEnabled = 0;
|
||||||
controllers->controller[i].absTriggers[j].maxEnabled = 0;
|
controllers->controller[i].absTriggers[j].maxEnabled = 0;
|
||||||
controllers->controller[i].absTriggers[j].shakeEnabled = 0;
|
|
||||||
controllers->controller[i].absTriggers[j].isNeg = 0;
|
|
||||||
controllers->controller[i].absTriggers[j].isAnalogue = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int j = 0; j < KEY_MAX; j++)
|
for (int j = 0; j < KEY_MAX; j++)
|
||||||
@@ -1337,20 +1255,8 @@ ControllerStatus startControllerThreads(Controllers *controllers)
|
|||||||
for (int j = 0; j < controllers->controller[i].inputCount; j++)
|
for (int j = 0; j < controllers->controller[i].inputCount; j++)
|
||||||
{
|
{
|
||||||
char *mapping = getMapping(controllers->controller[i].inputs[j].inputName);
|
char *mapping = getMapping(controllers->controller[i].inputs[j].inputName);
|
||||||
int negabs = 0;
|
if (mapping == NULL)
|
||||||
|
continue;
|
||||||
if (mapping == NULL) {
|
|
||||||
// give a 2nd chance with a techninal mapping
|
|
||||||
mapping = getMapping(controllers->controller[i].inputs[j].inputTechName);
|
|
||||||
if (mapping == NULL) {
|
|
||||||
// give a 3rd change with negativ technical mapping
|
|
||||||
mapping = getMapping(controllers->controller[i].inputs[j].inputTechNegName);
|
|
||||||
negabs = 1;
|
|
||||||
if (mapping == NULL) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ArcadeInput input = {0};
|
ArcadeInput input = {0};
|
||||||
ControllerStatus status = getArcadeInputByName(mapping, &input);
|
ControllerStatus status = getArcadeInputByName(mapping, &input);
|
||||||
@@ -1375,9 +1281,6 @@ ControllerStatus startControllerThreads(Controllers *controllers)
|
|||||||
input.name);
|
input.name);
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].player =
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].player =
|
||||||
input.player;
|
input.player;
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].isNeg = negabs;
|
|
||||||
if (strstr(input.name, "ANALOGUE") == NULL)
|
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].isAnalogue = 0;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1390,9 +1293,6 @@ ControllerStatus startControllerThreads(Controllers *controllers)
|
|||||||
input.name);
|
input.name);
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].maxPlayer =
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].maxPlayer =
|
||||||
input.player;
|
input.player;
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].isNeg = negabs;
|
|
||||||
if (strstr(input.name, "ANALOGUE") == NULL)
|
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].isAnalogue = 0;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1405,21 +1305,6 @@ ControllerStatus startControllerThreads(Controllers *controllers)
|
|||||||
input.name);
|
input.name);
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].minPlayer =
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].minPlayer =
|
||||||
input.player;
|
input.player;
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].isNeg = negabs;
|
|
||||||
if (strstr(input.name, "ANALOGUE") == NULL)
|
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].isAnalogue = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ANALOGUE_SHAKE:
|
|
||||||
{
|
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].shakeEnabled = 1;
|
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].shakeChannel =
|
|
||||||
input.channel;
|
|
||||||
strcpy(controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].shakeName,
|
|
||||||
input.name);
|
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].shakePlayer =
|
|
||||||
input.player;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <linux/input-event-codes.h>
|
#include <linux/input-event-codes.h>
|
||||||
|
|
||||||
#define SIZE 128
|
#define SIZE 1024
|
||||||
#define CONTROLLER_THREAD_MAX 256
|
#define CONTROLLER_THREAD_MAX 256
|
||||||
|
|
||||||
|
|
||||||
@@ -31,14 +31,6 @@ typedef struct
|
|||||||
int maxEnabled;
|
int maxEnabled;
|
||||||
|
|
||||||
int isAnalogue;
|
int isAnalogue;
|
||||||
int isNeg; // reversed axis
|
|
||||||
|
|
||||||
char shakeName[SIZE];
|
|
||||||
int shakeChannel;
|
|
||||||
int shakeEnabled;
|
|
||||||
int shakePlayer;
|
|
||||||
double shakePreviousScaled;
|
|
||||||
|
|
||||||
int isCoin;
|
int isCoin;
|
||||||
} ArcadeInput;
|
} ArcadeInput;
|
||||||
|
|
||||||
@@ -52,15 +44,12 @@ typedef enum {
|
|||||||
NO_SPECIAL_FUNCTION = 0,
|
NO_SPECIAL_FUNCTION = 0,
|
||||||
ANALOGUE_TO_DIGITAL_MAX,
|
ANALOGUE_TO_DIGITAL_MAX,
|
||||||
ANALOGUE_TO_DIGITAL_MIN,
|
ANALOGUE_TO_DIGITAL_MIN,
|
||||||
DIGITAL_TO_ANALOGUE,
|
DIGITAL_TO_ANALOGUE
|
||||||
ANALOGUE_SHAKE
|
|
||||||
} SpecialFunction;
|
} SpecialFunction;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char inputName[SIZE];
|
char inputName[SIZE];
|
||||||
char inputTechName[SIZE];
|
|
||||||
char inputTechNegName[SIZE];
|
|
||||||
int evType;
|
int evType;
|
||||||
int evCode;
|
int evCode;
|
||||||
SpecialFunction specialFunction;
|
SpecialFunction specialFunction;
|
||||||
@@ -69,12 +58,12 @@ typedef struct
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char name[SIZE];
|
char name[SIZE];
|
||||||
char path[320];
|
char path[SIZE];
|
||||||
char physicalLocation[128];
|
char physicalLocation[SIZE];
|
||||||
int absMax[ABS_MAX];
|
int absMax[ABS_MAX];
|
||||||
int absMin[ABS_MAX];
|
int absMin[ABS_MAX];
|
||||||
|
|
||||||
ControllerInput inputs[320];
|
ControllerInput inputs[SIZE];
|
||||||
int inputCount;
|
int inputCount;
|
||||||
|
|
||||||
ArcadeInput keyTriggers[KEY_MAX];
|
ArcadeInput keyTriggers[KEY_MAX];
|
||||||
|
|||||||
@@ -444,7 +444,7 @@ int main(int argc, char *argv[])
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(argv[i], "-z") == 0 || strcmp(argv[i], "--ziink") == 0)
|
if (strcmp(argv[i], "-z") == 0 || strcmp(argv[i], "--zink") == 0)
|
||||||
{
|
{
|
||||||
zink = 1;
|
zink = 1;
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -160,6 +160,10 @@ void *readJVSFrameThread(void * arg)
|
|||||||
waitForEnd = 0;
|
waitForEnd = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
while (jvsFrameBuffer.ready == 1)
|
||||||
|
{
|
||||||
|
usleep(1);
|
||||||
|
}
|
||||||
// printf("SERIAL thread debug: trying to read byte.\n");
|
// printf("SERIAL thread debug: trying to read byte.\n");
|
||||||
// Try to read a byte from serial, this call will be blocking if VMIN > 0 and VTIME = 0
|
// Try to read a byte from serial, this call will be blocking if VMIN > 0 and VTIME = 0
|
||||||
bytesRead = read(fd, &localBuffer[byteCount], 1);
|
bytesRead = read(fd, &localBuffer[byteCount], 1);
|
||||||
@@ -237,14 +241,13 @@ int startJVSFrameThread(int * fd) {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
JVSFrame readJVSFrameFromThread() {
|
JVSFrame readJVSFrameFromThread() {
|
||||||
|
|
||||||
JVSFrame frame;
|
JVSFrame frame;
|
||||||
// Lock while reading/writing to shared frame
|
// Lock while reading/writing to shared frame
|
||||||
pthread_mutex_lock(&jvsBuffer_lock);
|
pthread_mutex_lock(&jvsBuffer_lock);
|
||||||
|
|
||||||
// Check if we have a valid frame
|
// Check if we have a valid frame
|
||||||
if (jvsFrameBuffer.ready == 1) {
|
if (jvsFrameBuffer.ready == 1) {
|
||||||
frame = jvsFrameBuffer;
|
memcpy(&frame, &jvsFrameBuffer, sizeof(JVSFrame));
|
||||||
// It has been red, we disable this frame
|
// It has been red, we disable this frame
|
||||||
jvsFrameBuffer.ready = 0;
|
jvsFrameBuffer.ready = 0;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -370,8 +370,8 @@ int isTestMode()
|
|||||||
|
|
||||||
void myGlBindTexture(GLenum target, GLuint texture)
|
void myGlBindTexture(GLenum target, GLuint texture)
|
||||||
{
|
{
|
||||||
// const char *targetName = "";
|
curTarget = target;
|
||||||
// switch (target)
|
curTextureID = texture;
|
||||||
|
|
||||||
void (*_glBindTexture)(GLenum, GLuint) = dlsym(RTLD_NEXT, "glBindTexture");
|
void (*_glBindTexture)(GLenum, GLuint) = dlsym(RTLD_NEXT, "glBindTexture");
|
||||||
_glBindTexture(target, texture);
|
_glBindTexture(target, texture);
|
||||||
|
|||||||
Reference in New Issue
Block a user