We can play Blue Thunder!
This commit is contained in:
parent
70dd504b7b
commit
be5e72fc6b
2 changed files with 9 additions and 30 deletions
|
@ -165,6 +165,7 @@ static SDL_Color _colorBackground = { 0, 0, 0, 0 };
|
||||||
static SDL_Surface *_overlay = NULL;
|
static SDL_Surface *_overlay = NULL;
|
||||||
static SDL_Window *_window = NULL;
|
static SDL_Window *_window = NULL;
|
||||||
static SDL_Renderer *_renderer = NULL;
|
static SDL_Renderer *_renderer = NULL;
|
||||||
|
static SDL_Texture *_videoTexture = NULL;
|
||||||
static int _nextSpriteId = 0;
|
static int _nextSpriteId = 0;
|
||||||
static int _nextSoundId = 0;
|
static int _nextSoundId = 0;
|
||||||
static int _nextFontId = 0;
|
static int _nextFontId = 0;
|
||||||
|
@ -301,7 +302,6 @@ void channelFinished(int channel);
|
||||||
void luaDie(lua_State *L, char *method, char *fmt, ...);
|
void luaDie(lua_State *L, char *method, char *fmt, ...);
|
||||||
int luaError(lua_State *L);
|
int luaError(lua_State *L);
|
||||||
void luaTrace(lua_State *L, char *method, char *fmt, ...);
|
void luaTrace(lua_State *L, char *method, char *fmt, ...);
|
||||||
void makeZeroTransparent(SDL_Texture *texture);
|
|
||||||
void processKey(bool down, int keysym);
|
void processKey(bool down, int keysym);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1373,9 +1373,11 @@ int apiVldpGetPixel(lua_State *L) {
|
||||||
if (lua_isnumber(L, 2)) {
|
if (lua_isnumber(L, 2)) {
|
||||||
rect.h = 1;
|
rect.h = 1;
|
||||||
rect.w = 1;
|
rect.w = 1;
|
||||||
d = lua_tonumber(L, 1); rect.x = (int)d;
|
d = lua_tonumber(L, 1); rect.x = (int)(d / _overlayScaleX);
|
||||||
d = lua_tonumber(L, 2); rect.y = (int)d;
|
d = lua_tonumber(L, 2); rect.y = (int)(d / _overlayScaleY);
|
||||||
|
if (SDL_SetRenderTarget(_renderer, _videoTexture) < 0) luaDie(L, "vldpGetPixel", "%s", SDL_GetError());
|
||||||
if (SDL_RenderReadPixels(_renderer, &rect, SDL_PIXELFORMAT_BGRA32, pixel, SDL_BYTESPERPIXEL(SDL_PIXELFORMAT_BGRA32) * videoGetWidth(_videoHandle)) < 0) luaDie(L, "vldpGetPixel", "%s", SDL_GetError());
|
if (SDL_RenderReadPixels(_renderer, &rect, SDL_PIXELFORMAT_BGRA32, pixel, SDL_BYTESPERPIXEL(SDL_PIXELFORMAT_BGRA32) * videoGetWidth(_videoHandle)) < 0) luaDie(L, "vldpGetPixel", "%s", SDL_GetError());
|
||||||
|
if (SDL_SetRenderTarget(_renderer, NULL) < 0) luaDie(L, "vldpGetPixel", "%s", SDL_GetError());
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1830,29 +1832,6 @@ void luaTrace(lua_State *L, char *method, char *fmt, ...) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void makeZeroTransparent(SDL_Texture *texture) {
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
int w;
|
|
||||||
int h;
|
|
||||||
int access;
|
|
||||||
Uint32 format;
|
|
||||||
Uint32 *pixel = NULL; // Four bytes in BGRA order
|
|
||||||
size_t pixelSize = 0;
|
|
||||||
static size_t lastPixelsSize = 0;
|
|
||||||
|
|
||||||
if (SDL_QueryTexture(texture, &format, &access, &w, &h) < 0) utilDie("%s", SDL_GetError());
|
|
||||||
pixelSize = (size_t)(w * h * 4);
|
|
||||||
if (pixelSize != lastPixelsSize) {
|
|
||||||
// Reallocate buffer
|
|
||||||
if (_pixelBuffer) free(_pixelBuffer);
|
|
||||||
lastPixelsSize = pixelSize;
|
|
||||||
_pixelBuffer = malloc(lastPixelsSize);
|
|
||||||
if (!_pixelBuffer) utilDie("Unable to allocate pixels for transparency replacement.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void processKey(bool down, int keysym) {
|
void processKey(bool down, int keysym) {
|
||||||
int move;
|
int move;
|
||||||
|
|
||||||
|
@ -1927,7 +1906,6 @@ void singe(SDL_Window *window, SDL_Renderer *renderer) {
|
||||||
int thisFrame = -1;
|
int thisFrame = -1;
|
||||||
int lastFrame = -1;
|
int lastFrame = -1;
|
||||||
int intReturn = 0;
|
int intReturn = 0;
|
||||||
SDL_Texture *videoTexture = NULL;
|
|
||||||
SDL_Texture *overlayTexture = NULL;
|
SDL_Texture *overlayTexture = NULL;
|
||||||
SpriteT *sprite = NULL;
|
SpriteT *sprite = NULL;
|
||||||
SpriteT *spriteTemp = NULL;
|
SpriteT *spriteTemp = NULL;
|
||||||
|
@ -2229,7 +2207,7 @@ void singe(SDL_Window *window, SDL_Renderer *renderer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update video
|
// Update video
|
||||||
thisFrame = videoUpdate(_videoHandle, &videoTexture);
|
thisFrame = videoUpdate(_videoHandle, &_videoTexture);
|
||||||
if ((thisFrame != lastFrame) && (thisFrame>= 0)) {
|
if ((thisFrame != lastFrame) && (thisFrame>= 0)) {
|
||||||
lastFrame = thisFrame;
|
lastFrame = thisFrame;
|
||||||
_refreshDisplay = true;
|
_refreshDisplay = true;
|
||||||
|
@ -2238,7 +2216,7 @@ void singe(SDL_Window *window, SDL_Renderer *renderer) {
|
||||||
// Update display
|
// Update display
|
||||||
if (_refreshDisplay) {
|
if (_refreshDisplay) {
|
||||||
//***TODO*** Handle overlay and blank disk frames
|
//***TODO*** Handle overlay and blank disk frames
|
||||||
SDL_RenderCopy(_renderer, videoTexture, NULL, NULL);
|
SDL_RenderCopy(_renderer, _videoTexture, NULL, NULL);
|
||||||
//makeZeroTransparent(_overlay);
|
//makeZeroTransparent(_overlay);
|
||||||
overlayTexture = SDL_CreateTextureFromSurface(_renderer, _overlay);
|
overlayTexture = SDL_CreateTextureFromSurface(_renderer, _overlay);
|
||||||
if (!overlayTexture) utilDie("%s", SDL_GetError());
|
if (!overlayTexture) utilDie("%s", SDL_GetError());
|
||||||
|
|
|
@ -304,7 +304,8 @@ int videoLoad(char *filename, char *indexPath, bool stretchVideo, SDL_Renderer *
|
||||||
|
|
||||||
// Create video texture
|
// Create video texture
|
||||||
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
|
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
|
||||||
v->videoTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_BGRA32, SDL_TEXTUREACCESS_STREAMING, v->propFrame->EncodedWidth, v->propFrame->EncodedHeight);
|
//v->videoTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_BGRA32, SDL_TEXTUREACCESS_STREAMING, v->propFrame->EncodedWidth, v->propFrame->EncodedHeight);
|
||||||
|
v->videoTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_BGRA32, SDL_TEXTUREACCESS_TARGET, v->propFrame->EncodedWidth, v->propFrame->EncodedHeight);
|
||||||
if (v->videoTexture == NULL) utilDie("%s", SDL_GetError());
|
if (v->videoTexture == NULL) utilDie("%s", SDL_GetError());
|
||||||
if (!stretchVideo) {
|
if (!stretchVideo) {
|
||||||
SDL_RenderSetLogicalSize(renderer, v->propFrame->EncodedWidth, v->propFrame->EncodedHeight);
|
SDL_RenderSetLogicalSize(renderer, v->propFrame->EncodedWidth, v->propFrame->EncodedHeight);
|
||||||
|
|
Loading…
Add table
Reference in a new issue