Merge pull request 'Integration of a basic starfield shader based on static table' (#2) from dev into master
Reviewed-on: https://gitea.planet-casio.com/Slyvtt/Shmup/pulls/2
This commit is contained in:
commit
3251d16dc0
|
@ -18,6 +18,7 @@ set(SOURCES
|
|||
src/starfield.cpp
|
||||
src/pixelshader.cpp
|
||||
src/pixellistshader.cpp
|
||||
src/starfieldshader.cpp
|
||||
# ...
|
||||
)
|
||||
set(ASSETS_cg
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
#ifndef MYAZURSHADERS_H
|
||||
#define MYAZURSHADERS_H
|
||||
|
||||
|
||||
#include "starfield.h"
|
||||
#include <vector>
|
||||
|
||||
void azrp_pixel(int x1, int y1, int color);
|
||||
|
||||
void azrp_pixellist(std::vector<Pixel*> const &list, int fragnum );
|
||||
void azrp_pixellist(std::vector<Pixel*> const &list, int fragnum );
|
||||
|
||||
|
||||
void azrp_starfield( void );
|
||||
void azrp_starfield_init( void );
|
||||
|
||||
#endif //MYAZURSHADERS_H
|
26
src/main.cpp
26
src/main.cpp
|
@ -48,10 +48,10 @@ uint8_t texttodraw=1;
|
|||
|
||||
|
||||
|
||||
void Create_Starfield( void )
|
||||
/*void Create_Starfield( void )
|
||||
{
|
||||
MyStarField = new Starfield();
|
||||
}
|
||||
}*/
|
||||
|
||||
void Create_Explosion( void )
|
||||
{
|
||||
|
@ -73,6 +73,7 @@ void Create_Explosion( void )
|
|||
static void update( float dt )
|
||||
{
|
||||
// all update stuff depending on time will be done here
|
||||
|
||||
for(unsigned int i=0; i<MyParticles.size(); i++)
|
||||
{
|
||||
MyParticles[i]->Update( dt );
|
||||
|
@ -85,7 +86,8 @@ static void update( float dt )
|
|||
}
|
||||
}
|
||||
|
||||
MyStarField->Update( dt );
|
||||
//MyStarField->Update( dt );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -110,6 +112,8 @@ static void get_inputs( void )
|
|||
if(keydown(KEY_F3)) {texttodraw=2;}
|
||||
if(keydown(KEY_F4)) {texttodraw=3;}
|
||||
|
||||
if(keydown(KEY_F6)) {azrp_starfield_init();}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -129,9 +133,9 @@ int main(void)
|
|||
azrp_shader_image_rgb16_configure();
|
||||
azrp_shader_image_p8_configure();
|
||||
azrp_shader_image_p4_configure();
|
||||
azrp_shader_triangle_configure();
|
||||
|
||||
|
||||
Create_Starfield();
|
||||
azrp_starfield_init();
|
||||
|
||||
|
||||
usb_interface_t const *interfaces[] = { &usb_ff_bulk, NULL };
|
||||
|
@ -189,8 +193,9 @@ int main(void)
|
|||
|
||||
for(auto& p : MyParticles)
|
||||
p->Render();
|
||||
|
||||
MyStarField->Render();
|
||||
|
||||
|
||||
azrp_starfield();
|
||||
|
||||
azrp_update();
|
||||
}
|
||||
|
@ -225,11 +230,12 @@ int main(void)
|
|||
if (textoutput && usb_is_open())
|
||||
{
|
||||
char texttosend[1024];
|
||||
for(unsigned int i=0; i<MyStarField->MyStars.size(); i++)
|
||||
|
||||
/*for(unsigned int i=0; i<NBPARTS; i++)
|
||||
{
|
||||
sprintf( texttosend, "Star %d : x=%d : y=%d : s=%d : c=%d", i, MyStarField->MyStars[i]->x, (int) MyStarField->MyStars[i]->y, MyStarField->MyStars[i]->size, MyStarField->MyStars[i]->color );
|
||||
sprintf( texttosend, "Star %d : x=%d : y=%d : f=%d : s=%d : c=%d", i, datastar[i].x, datastar[i].y, datastar[i].s, datastar[i].frag, datastar[i].c );
|
||||
usb_fxlink_text(texttosend, 0);
|
||||
}
|
||||
}*/
|
||||
|
||||
textoutput = false;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,98 @@
|
|||
#include <azur/gint/render.h>
|
||||
#include "MyAzurShaders.h"
|
||||
#include <cstdlib>
|
||||
#include <cstdio>
|
||||
|
||||
#include <gint/rtc.h>
|
||||
#include <gint/usb.h>
|
||||
#include <gint/usb-ff-bulk.h>
|
||||
|
||||
uint8_t AZRP_SHADER_STARFIELD = -1;
|
||||
|
||||
|
||||
|
||||
#define NBPARTS 100
|
||||
|
||||
struct particle
|
||||
{
|
||||
int x,y,s,c,frag,off;
|
||||
};
|
||||
|
||||
particle datastar[NBPARTS];
|
||||
|
||||
|
||||
__attribute__((constructor))
|
||||
static void register_shader(void)
|
||||
{
|
||||
extern azrp_shader_t azrp_shader_starfield;
|
||||
AZRP_SHADER_STARFIELD = azrp_register_shader(azrp_shader_starfield);
|
||||
}
|
||||
|
||||
|
||||
void azrp_shader_starfield_configure(void)
|
||||
{
|
||||
azrp_set_uniforms(AZRP_SHADER_STARFIELD, (void *)azrp_width);
|
||||
}
|
||||
|
||||
|
||||
struct command {
|
||||
uint8_t shader_id;
|
||||
uint8_t current_frag;
|
||||
particle *data;
|
||||
};
|
||||
|
||||
|
||||
void azrp_starfield_init( void )
|
||||
{
|
||||
srand(rtc_ticks());
|
||||
|
||||
for(int i=0; i<NBPARTS; i++)
|
||||
{
|
||||
datastar[i].x = rand( ) % 396;
|
||||
datastar[i].y = rand( ) % 224;
|
||||
datastar[i].s = 1 + rand( ) % 4;
|
||||
datastar[i].c = 0xFFFF;
|
||||
datastar[i].frag = datastar[i].y / 16;
|
||||
datastar[i].off = datastar[i].y & 15;
|
||||
}
|
||||
}
|
||||
|
||||
void azrp_starfield( void )
|
||||
{
|
||||
prof_enter(azrp_perf_cmdgen);
|
||||
|
||||
struct command cmd;
|
||||
cmd.shader_id = AZRP_SHADER_STARFIELD;
|
||||
cmd.current_frag = 0;
|
||||
cmd.data = datastar;
|
||||
|
||||
for(int i=0; i<NBPARTS; i++)
|
||||
{
|
||||
datastar[i].y = (datastar[i].y + datastar[i].s) % 224;
|
||||
datastar[i].frag = datastar[i].y / 16;
|
||||
datastar[i].off = datastar[i].y & 15;
|
||||
}
|
||||
|
||||
|
||||
int fragmin = 0;
|
||||
int fragcount = (223 >> 4) + 1;
|
||||
|
||||
azrp_queue_command(&cmd, sizeof cmd, fragmin, fragcount);
|
||||
prof_leave(azrp_perf_cmdgen);
|
||||
}
|
||||
|
||||
|
||||
void azrp_shader_starfield( void *uniforms, void *comnd, void *fragment )
|
||||
{
|
||||
struct command *cmd = (struct command *) comnd;
|
||||
uint16_t *frag = (uint16_t *) fragment;
|
||||
particle *data = cmd->data;
|
||||
|
||||
for(int i=0; i<NBPARTS; i++)
|
||||
if (cmd->current_frag == data[i].frag)
|
||||
{
|
||||
frag[azrp_width * data[i].off + data[i].x] = data[i].c;
|
||||
}
|
||||
|
||||
cmd->current_frag++;
|
||||
}
|
Loading…
Reference in New Issue