add "scene" structure

This commit is contained in:
Zack Buhman 2025-06-26 17:17:32 -05:00
parent 040a70ee51
commit 1107158309
11 changed files with 98 additions and 80 deletions

View File

@ -4,7 +4,8 @@ OPT = -O2
MAKEFILE_PATH := $(patsubst %/,%,$(dir $(abspath $(firstword $(MAKEFILE_LIST)))))
LIB ?= $(MAKEFILE_PATH)/dreamcast
CFLAGS += -I$(MAKEFILE_PATH)
CFLAGS += -I$(MAKEFILE_PATH)/
CFLAGS += -I$(MAKEFILE_PATH)/src
CFLAGS += -I$(MAKEFILE_PATH)/dreamcast
CFLAGS += -Wno-error=strict-aliasing -fno-strict-aliasing
CARCH = -m4-single -ml

View File

@ -25,25 +25,9 @@
#include "font/tandy1k.data.h"
#include "framebuffer.hpp"
#include "src/scene/tracker/scene.hpp"
constexpr uint32_t ta_alloc = 0
| ta_alloc_ctrl::pt_opb::_32x4byte
| ta_alloc_ctrl::tm_opb::no_list
| ta_alloc_ctrl::t_opb::_8x4byte
| ta_alloc_ctrl::om_opb::no_list
| ta_alloc_ctrl::o_opb::_32x4byte;
constexpr int ta_cont_count = 1;
constexpr struct opb_size opb_size[ta_cont_count] = {
{
.opaque = 32 * 4,
.opaque_modifier = 0,
.translucent = 8 * 4,
.translucent_modifier = 0,
.punch_through = 32 * 4
}
};
#include "scene/scene.hpp"
#include "scene/tracker/scene.hpp"
#include "graphics.hpp"
static volatile int ta_in_use = 0;
static volatile int core_in_use = 0;
@ -51,6 +35,12 @@ static volatile int next_frame = 0;
static volatile int framebuffer_ix = 0;
static volatile int next_frame_ix = 0;
static const scene::scene scenes[] = {
scene::tracker::scene,
};
static const scene::scene * current_scene = &scenes[0];
void graphics_interrupt(uint32_t istnrm)
{
if (istnrm & istnrm::v_blank_in) {
@ -152,22 +142,25 @@ void graphics_init()
background_parameter2(texture_memory_alloc.background[0].start,
0xff800080);
transfer_textures();
transfer_palettes();
}
void graphics_scene_init()
{
region_array_multipass(framebuffer.tile_width(),
framebuffer.tile_height(),
opb_size,
&current_scene->opb_size,
ta_cont_count,
texture_memory_alloc.region_array.start,
texture_memory_alloc.object_list.start);
transfer_textures();
transfer_palettes();
}
void graphics_event(ta_parameter_writer& writer)
{
writer.offset = 0;
tracker::scene::transfer(writer);
scene::tracker::transfer(writer);
while (ta_in_use);
while (core_in_use);
@ -176,8 +169,8 @@ void graphics_event(ta_parameter_writer& writer)
texture_memory_alloc.isp_tsp_parameters.end,
texture_memory_alloc.object_list.start,
texture_memory_alloc.object_list.end,
opb_size[0].total(),
ta_alloc,
current_scene->opb_size.total(),
current_scene->ta_alloc,
framebuffer.tile_width(),
framebuffer.tile_height());
ta_polygon_converter_writeback(writer.buf, writer.offset);

View File

@ -4,6 +4,9 @@
#include "holly/ta_parameter.hpp"
constexpr int ta_cont_count = 1;
void graphics_interrupt(uint32_t istnrm);
void graphics_init();
void graphics_event(ta_parameter_writer& writer);
void graphics_scene_init();

View File

@ -239,6 +239,7 @@ void main()
const float aica_clock_multiplier = 44.1;
load_xm(aica_clock_multiplier);
graphics_init();
graphics_scene_init();
test_pattern();

13
src/scene/scene.hpp Normal file
View File

@ -0,0 +1,13 @@
#pragma once
#include "holly/region_array.hpp"
namespace scene {
struct scene {
const uint32_t ta_alloc;
const struct opb_size opb_size;
void (* const transfer)(ta_parameter_writer& writer);
};
}

View File

@ -22,8 +22,7 @@ static inline int round_up(int n, int m)
return n + m - rem;
}
namespace tracker {
namespace channel_status {
namespace scene::tracker::channel_status {
void transfer(ta_parameter_writer& writer, int x, int y)
{
@ -100,4 +99,3 @@ void transfer(ta_parameter_writer& writer, int x, int y)
}
}
}

View File

@ -2,8 +2,6 @@
#include "holly/ta_parameter.hpp"
namespace tracker {
namespace channel_status {
namespace scene::tracker::channel_status {
void transfer(ta_parameter_writer& writer, int x, int y);
}
}

View File

@ -172,8 +172,7 @@ static void transfer_line(ta_parameter_writer& writer, int line_index, int x, in
}
}
namespace tracker {
namespace notes {
namespace scene::tracker::notes {
void borders(ta_parameter_writer& writer, int x, int y)
{
@ -250,4 +249,3 @@ void transfer_middle_line(ta_parameter_writer& writer, float x, float y)
}
}
}

View File

@ -2,12 +2,10 @@
#include "holly/ta_parameter.hpp"
namespace tracker {
namespace notes {
namespace scene::tracker::notes {
void borders(ta_parameter_writer& writer, int x, int y);
void transfer_lines(ta_parameter_writer& writer, int x, int y);
void transfer_middle_line(ta_parameter_writer& writer, float x, float y);
}
}

View File

@ -1,10 +1,12 @@
#include "../../ta_parameter.hpp"
#include "holly/ta_bits.hpp"
#include "ta_parameter.hpp"
#include "notes.hpp"
#include "channel_status.hpp"
#include "scene/scene.hpp"
namespace tracker {
namespace scene {
namespace scene::tracker {
void transfer(ta_parameter_writer& writer)
{
@ -44,7 +46,5 @@ void transfer(ta_parameter_writer& writer)
writer.append<ta_global_parameter::end_of_list>() =
ta_global_parameter::end_of_list(para_control::para_type::end_of_list);
}
}
}
}

View File

@ -1,7 +1,22 @@
#pragma once
namespace tracker {
namespace scene {
namespace scene::tracker {
void transfer(ta_parameter_writer& writer);
}
struct scene::scene scene = {
.ta_alloc = ta_alloc_ctrl::pt_opb::_32x4byte
| ta_alloc_ctrl::tm_opb::no_list
| ta_alloc_ctrl::t_opb::_8x4byte
| ta_alloc_ctrl::om_opb::no_list
| ta_alloc_ctrl::o_opb::_32x4byte,
.opb_size = {
.opaque = 32 * 4,
.opaque_modifier = 0,
.translucent = 8 * 4,
.translucent_modifier = 0,
.punch_through = 32 * 4
},
.transfer = transfer,
};
}