Update Bitmap pointer management
This commit is contained in:
@@ -222,9 +222,9 @@ void Editor::DrawGraphicsSheet(int offset) {
|
|||||||
((rom_.data()[0x513E + offset]))));
|
((rom_.data()[0x513E + offset]))));
|
||||||
pc_addr = core::SnesToPc(snes_addr);
|
pc_addr = core::SnesToPc(snes_addr);
|
||||||
std::cout << "Decompressing..." << std::endl;
|
std::cout << "Decompressing..." << std::endl;
|
||||||
char *decomp = rom_.Decompress(pc_addr);
|
auto decomp = rom_.Decompress(pc_addr);
|
||||||
std::cout << "Converting to 8bpp sheet..." << std::endl;
|
std::cout << "Converting to 8bpp sheet..." << std::endl;
|
||||||
sheet_buffer = rom_.SNES3bppTo8bppSheet((uchar *)decomp);
|
sheet_buffer = rom_.SNES3bppTo8bppSheet(decomp);
|
||||||
std::cout << "Assigning pixel data..." << std::endl;
|
std::cout << "Assigning pixel data..." << std::endl;
|
||||||
surface->pixels = sheet_buffer;
|
surface->pixels = sheet_buffer;
|
||||||
std::cout << "Creating texture from surface..." << std::endl;
|
std::cout << "Creating texture from surface..." << std::endl;
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include "app/core/constants.h"
|
#include "app/core/constants.h"
|
||||||
#include "app/gfx/snes_palette.h"
|
#include "app/gfx/snes_palette.h"
|
||||||
|
|
||||||
@@ -50,6 +52,8 @@ void Bitmap::Create(int width, int height, int depth, int size) {
|
|||||||
surface_->format->palette->colors[i].g = i * 31;
|
surface_->format->palette->colors[i].g = i * 31;
|
||||||
surface_->format->palette->colors[i].b = i * 31;
|
surface_->format->palette->colors[i].b = i * 31;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pixel_data_ = (uchar *)SDL_malloc(size);
|
||||||
surface_->pixels = pixel_data_;
|
surface_->pixels = pixel_data_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,9 +61,7 @@ void Bitmap::CreateTexture(std::shared_ptr<SDL_Renderer> renderer) {
|
|||||||
texture_ = SDL_CreateTextureFromSurface(renderer.get(), surface_);
|
texture_ = SDL_CreateTextureFromSurface(renderer.get(), surface_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bitmap::ApplyPalette(const SNESPalette& palette) {
|
void Bitmap::ApplyPalette(const SNESPalette &palette) { palette_ = palette; }
|
||||||
palette_ = palette;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace gfx
|
} // namespace gfx
|
||||||
} // namespace app
|
} // namespace app
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include "app/core/constants.h"
|
#include "app/core/constants.h"
|
||||||
#include "app/gfx/snes_palette.h"
|
#include "app/gfx/snes_palette.h"
|
||||||
|
|
||||||
@@ -19,7 +21,7 @@ class Bitmap {
|
|||||||
void Create(int width, int height, int depth, int data_size);
|
void Create(int width, int height, int depth, int data_size);
|
||||||
void CreateTexture(std::shared_ptr<SDL_Renderer> renderer);
|
void CreateTexture(std::shared_ptr<SDL_Renderer> renderer);
|
||||||
|
|
||||||
void ApplyPalette(const SNESPalette& palette);
|
void ApplyPalette(const SNESPalette &palette);
|
||||||
|
|
||||||
int GetWidth() const { return width_; }
|
int GetWidth() const { return width_; }
|
||||||
int GetHeight() const { return height_; }
|
int GetHeight() const { return height_; }
|
||||||
|
|||||||
@@ -12,10 +12,8 @@ using namespace gfx;
|
|||||||
|
|
||||||
void Overworld::Load(ROM& rom) {
|
void Overworld::Load(ROM& rom) {
|
||||||
rom_ = rom;
|
rom_ = rom;
|
||||||
|
mapblockset16.Create(128, 8192, 8, 1048576);
|
||||||
overworldMapPointer = std::make_shared<uchar[]>(0x40000);
|
currentOWgfx16.Create(128, 512, 4, (128 * 512) / 2);
|
||||||
mapblockset16 = std::make_shared<uchar[]>(1048576);
|
|
||||||
currentOWgfx16Ptr = std::make_shared<uchar[]>((128 * 512) / 2);
|
|
||||||
|
|
||||||
AssembleMap32Tiles();
|
AssembleMap32Tiles();
|
||||||
AssembleMap16Tiles();
|
AssembleMap16Tiles();
|
||||||
@@ -30,9 +28,9 @@ void Overworld::Load(ROM& rom) {
|
|||||||
|
|
||||||
auto size = tiles16.size();
|
auto size = tiles16.size();
|
||||||
for (int i = 0; i < 160; i++) {
|
for (int i = 0; i < 160; i++) {
|
||||||
overworld_maps_[i].BuildMap(mapParent, size, gameState, allmapsTilesLW,
|
overworld_maps_[i].BuildMap(
|
||||||
allmapsTilesDW, allmapsTilesSP,
|
mapParent, size, gameState, allmapsTilesLW, allmapsTilesDW,
|
||||||
currentOWgfx16Ptr.get(), mapblockset16.get());
|
allmapsTilesSP, currentOWgfx16.GetData(), mapblockset16.GetData());
|
||||||
}
|
}
|
||||||
|
|
||||||
isLoaded = true;
|
isLoaded = true;
|
||||||
@@ -252,9 +250,8 @@ void Overworld::FetchLargeMaps() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Overworld::LoadOverworldMap() {
|
void Overworld::LoadOverworldMap() {
|
||||||
overworldMapBitmap.Create(128, 128, 8, overworldMapPointer.get());
|
overworldMapBitmap.Create(128, 128, 8, 0x40000);
|
||||||
|
auto ptr = overworldMapBitmap.GetData();
|
||||||
auto ptr = overworldMapPointer;
|
|
||||||
|
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
for (int sy = 0; sy < 16; sy++) {
|
for (int sy = 0; sy < 16; sy++) {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include "app/core/constants.h"
|
#include "app/core/constants.h"
|
||||||
#include "app/gfx/bitmap.h"
|
#include "app/gfx/bitmap.h"
|
||||||
|
#include "app/gfx/psuedo_vram.h"
|
||||||
#include "app/gfx/snes_tile.h"
|
#include "app/gfx/snes_tile.h"
|
||||||
#include "app/rom.h"
|
#include "app/rom.h"
|
||||||
#include "app/zelda3/overworld_map.h"
|
#include "app/zelda3/overworld_map.h"
|
||||||
@@ -21,8 +22,8 @@ class Overworld {
|
|||||||
public:
|
public:
|
||||||
void Load(ROM& rom);
|
void Load(ROM& rom);
|
||||||
auto GetTiles16() const { return tiles16; }
|
auto GetTiles16() const { return tiles16; }
|
||||||
auto GetCurrentGfxSetPtr() { return currentOWgfx16Ptr; }
|
auto GetCurrentGfxSetPtr() { return currentOWgfx16.GetData(); }
|
||||||
auto GetMapBlockset16Ptr() { return mapblockset16; }
|
auto GetMapBlockset16Ptr() { return mapblockset16.GetData(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ushort GenerateTile32(int i, int k, int dimension);
|
ushort GenerateTile32(int i, int k, int dimension);
|
||||||
@@ -41,17 +42,15 @@ class Overworld {
|
|||||||
std::vector<std::vector<ushort>> allmapsTilesDW; // 64 maps * (32*32 tiles)
|
std::vector<std::vector<ushort>> allmapsTilesDW; // 64 maps * (32*32 tiles)
|
||||||
std::vector<std::vector<ushort>> allmapsTilesSP; // 32 maps * (32*32 tiles)
|
std::vector<std::vector<ushort>> allmapsTilesSP; // 32 maps * (32*32 tiles)
|
||||||
|
|
||||||
std::shared_ptr<uchar[]> mapblockset16;
|
gfx::Bitmap mapblockset16;
|
||||||
std::shared_ptr<uchar[]> currentOWgfx16Ptr;
|
gfx::Bitmap currentOWgfx16;
|
||||||
|
gfx::Bitmap overworldMapBitmap;
|
||||||
|
|
||||||
std::vector<gfx::Tile16> tiles16;
|
std::vector<gfx::Tile16> tiles16;
|
||||||
std::vector<gfx::Tile32> tiles32;
|
std::vector<gfx::Tile32> tiles32;
|
||||||
std::vector<gfx::Tile32> map16tiles;
|
std::vector<gfx::Tile32> map16tiles;
|
||||||
std::vector<OverworldMap> overworld_maps_;
|
std::vector<OverworldMap> overworld_maps_;
|
||||||
|
|
||||||
gfx::Bitmap overworldMapBitmap;
|
|
||||||
std::shared_ptr<uchar[]> overworldMapPointer;
|
|
||||||
|
|
||||||
const int map32address[4] = {
|
const int map32address[4] = {
|
||||||
core::constants::map32TilesTL, core::constants::map32TilesTR,
|
core::constants::map32TilesTL, core::constants::map32TilesTR,
|
||||||
core::constants::map32TilesBL, core::constants::map32TilesBR};
|
core::constants::map32TilesBL, core::constants::map32TilesBR};
|
||||||
|
|||||||
Reference in New Issue
Block a user