We can play Blue Thunder!

This commit is contained in:
Scott Duensing 2019-12-11 20:58:36 -06:00
parent 70dd504b7b
commit be5e72fc6b
2 changed files with 9 additions and 30 deletions

View file

@ -165,6 +165,7 @@ static SDL_Color _colorBackground = { 0, 0, 0, 0 };
static SDL_Surface *_overlay = NULL;
static SDL_Window *_window = NULL;
static SDL_Renderer *_renderer = NULL;
static SDL_Texture *_videoTexture = NULL;
static int _nextSpriteId = 0;
static int _nextSoundId = 0;
static int _nextFontId = 0;
@ -301,7 +302,6 @@ void channelFinished(int channel);
void luaDie(lua_State *L, char *method, char *fmt, ...);
int luaError(lua_State *L);
void luaTrace(lua_State *L, char *method, char *fmt, ...);
void makeZeroTransparent(SDL_Texture *texture);
void processKey(bool down, int keysym);
@ -1373,9 +1373,11 @@ int apiVldpGetPixel(lua_State *L) {
if (lua_isnumber(L, 2)) {
rect.h = 1;
rect.w = 1;
d = lua_tonumber(L, 1); rect.x = (int)d;
d = lua_tonumber(L, 2); rect.y = (int)d;
d = lua_tonumber(L, 1); rect.x = (int)(d / _overlayScaleX);
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_SetRenderTarget(_renderer, NULL) < 0) luaDie(L, "vldpGetPixel", "%s", SDL_GetError());
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) {
int move;
@ -1927,7 +1906,6 @@ void singe(SDL_Window *window, SDL_Renderer *renderer) {
int thisFrame = -1;
int lastFrame = -1;
int intReturn = 0;
SDL_Texture *videoTexture = NULL;
SDL_Texture *overlayTexture = NULL;
SpriteT *sprite = NULL;
SpriteT *spriteTemp = NULL;
@ -2229,7 +2207,7 @@ void singe(SDL_Window *window, SDL_Renderer *renderer) {
}
// Update video
thisFrame = videoUpdate(_videoHandle, &videoTexture);
thisFrame = videoUpdate(_videoHandle, &_videoTexture);
if ((thisFrame != lastFrame) && (thisFrame>= 0)) {
lastFrame = thisFrame;
_refreshDisplay = true;
@ -2238,7 +2216,7 @@ void singe(SDL_Window *window, SDL_Renderer *renderer) {
// Update display
if (_refreshDisplay) {
//***TODO*** Handle overlay and blank disk frames
SDL_RenderCopy(_renderer, videoTexture, NULL, NULL);
SDL_RenderCopy(_renderer, _videoTexture, NULL, NULL);
//makeZeroTransparent(_overlay);
overlayTexture = SDL_CreateTextureFromSurface(_renderer, _overlay);
if (!overlayTexture) utilDie("%s", SDL_GetError());

View file

@ -304,7 +304,8 @@ int videoLoad(char *filename, char *indexPath, bool stretchVideo, SDL_Renderer *
// Create video texture
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 (!stretchVideo) {
SDL_RenderSetLogicalSize(renderer, v->propFrame->EncodedWidth, v->propFrame->EncodedHeight);