mirror of
https://github.com/buserror/mii_emu.git
synced 2024-06-13 21:29:28 +00:00
Fix for 'black window' on some hardware
Plus a few other minor bits... Signed-off-by: Michel Pollet <buserror@gmail.com>
This commit is contained in:
parent
352a7f0c62
commit
bd0cda4f02
|
@ -34,6 +34,7 @@ mui_dispose(
|
||||||
mui_t *ui)
|
mui_t *ui)
|
||||||
{
|
{
|
||||||
pixman_region32_fini(&ui->inval);
|
pixman_region32_fini(&ui->inval);
|
||||||
|
pixman_region32_fini(&ui->redraw);
|
||||||
mui_font_dispose(ui);
|
mui_font_dispose(ui);
|
||||||
mui_window_t *w;
|
mui_window_t *w;
|
||||||
while ((w = TAILQ_FIRST(&ui->windows))) {
|
while ((w = TAILQ_FIRST(&ui->windows))) {
|
||||||
|
|
|
@ -111,7 +111,7 @@ enum mui_modifier_e {
|
||||||
#define MUI_ICON_SBAR_UP ""
|
#define MUI_ICON_SBAR_UP ""
|
||||||
#define MUI_ICON_SBAR_DOWN ""
|
#define MUI_ICON_SBAR_DOWN ""
|
||||||
|
|
||||||
/* These are specific the Charcoal System font */
|
/* These are specific to our custom version of the Charcoal System font */
|
||||||
#define MUI_GLYPH_APPLE "" // solid apple
|
#define MUI_GLYPH_APPLE "" // solid apple
|
||||||
#define MUI_GLYPH_OAPPLE "" // open apple
|
#define MUI_GLYPH_OAPPLE "" // open apple
|
||||||
#define MUI_GLYPH_COMMAND ""
|
#define MUI_GLYPH_COMMAND ""
|
||||||
|
@ -138,7 +138,7 @@ enum mui_modifier_e {
|
||||||
typedef uint64_t mui_time_t;
|
typedef uint64_t mui_time_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Even description. pretty standard stuff here -- the 'when' field is
|
* Event description. pretty standard stuff here -- the 'when' field is
|
||||||
* only used really to detect double clicks so far.
|
* only used really to detect double clicks so far.
|
||||||
*
|
*
|
||||||
* Even handlers should return true if the event was handled, (in which case
|
* Even handlers should return true if the event was handled, (in which case
|
||||||
|
@ -204,7 +204,7 @@ struct mui_listbox_elem_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Window DEFinition -- Handle all related to a window, from drawing to
|
* Window DEFinition -- Handle all related to a window, from drawing to
|
||||||
* even handling.
|
* event handling.
|
||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
MUI_WDEF_INIT = 0,
|
MUI_WDEF_INIT = 0,
|
||||||
|
@ -288,7 +288,7 @@ struct cg_ctx_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Describes a pixmap. Currently only used for the screen destination pixels.
|
* Describes a pixmap. Currently only used for the screen destination pixels.
|
||||||
* And really, only bpp:43 for ARGB is supported.
|
* And really, only bpp:32 for ARGB is supported.
|
||||||
*/
|
*/
|
||||||
typedef struct mui_pixmap_t {
|
typedef struct mui_pixmap_t {
|
||||||
uint8_t * pixels;
|
uint8_t * pixels;
|
||||||
|
@ -447,6 +447,7 @@ mui_font_textbox(
|
||||||
unsigned int text_len,
|
unsigned int text_len,
|
||||||
mui_color_t color,
|
mui_color_t color,
|
||||||
uint16_t flags );
|
uint16_t flags );
|
||||||
|
|
||||||
DECLARE_C_ARRAY(stb_ttc_g*, mui_glyph_array, 8, int x, y, w; );
|
DECLARE_C_ARRAY(stb_ttc_g*, mui_glyph_array, 8, int x, y, w; );
|
||||||
DECLARE_C_ARRAY(mui_glyph_array_t, mui_glyph_line_array, 8);
|
DECLARE_C_ARRAY(mui_glyph_array_t, mui_glyph_line_array, 8);
|
||||||
|
|
||||||
|
@ -519,7 +520,7 @@ mui_window_create(
|
||||||
uint8_t layer,
|
uint8_t layer,
|
||||||
const char * title,
|
const char * title,
|
||||||
uint32_t instance_size);
|
uint32_t instance_size);
|
||||||
// Dispose a window and it's content (controls).
|
// Dispose of a window and it's content (controls).
|
||||||
/*
|
/*
|
||||||
* Note: if an action is in progress the window is not freed immediately
|
* Note: if an action is in progress the window is not freed immediately
|
||||||
* but added to the zombie list, and freed when the action is done.
|
* but added to the zombie list, and freed when the action is done.
|
||||||
|
@ -574,8 +575,9 @@ struct mui_menu_items_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is a menu item descriptor (also used for the titles, bar a few bits).
|
* This is a menu item descriptor (also used for the titles, bar a few bits).
|
||||||
* This does not a *control* in the window, instead this is used to describe
|
* This is not a *control* in the window, instead this is used to describe
|
||||||
* the menus and menu item controls that are created when the menu becomes visible.
|
* the menus and menu item controls that are created when the menu becomes
|
||||||
|
* visible.
|
||||||
*/
|
*/
|
||||||
typedef struct mui_menu_item_t {
|
typedef struct mui_menu_item_t {
|
||||||
uint32_t disabled : 1, hilited : 1;
|
uint32_t disabled : 1, hilited : 1;
|
||||||
|
@ -777,10 +779,11 @@ mui_button_new(
|
||||||
const char * title,
|
const char * title,
|
||||||
uint32_t uid );
|
uint32_t uid );
|
||||||
/*
|
/*
|
||||||
* Create a static text box. Font is optional, flags correponds to the MUI_TEXT_ALIGN_*
|
* Create a static text box. Font is optional (default to the system main font),
|
||||||
* PLUS the extrast listed below.
|
* flags corresponds to the MUI_TEXT_ALIGN_* * PLUS the extra(s) listed below.
|
||||||
*/
|
*/
|
||||||
enum mui_textbox_e {
|
enum mui_textbox_e {
|
||||||
|
// draw the frame around the text box
|
||||||
MUI_CONTROL_TEXTBOX_FRAME = (1 << 8),
|
MUI_CONTROL_TEXTBOX_FRAME = (1 << 8),
|
||||||
};
|
};
|
||||||
mui_control_t *
|
mui_control_t *
|
||||||
|
|
|
@ -64,15 +64,30 @@ show_state:
|
||||||
char buf[32];
|
char buf[32];
|
||||||
sprintf(buf, "%s:%d", mii_sw_names[i],
|
sprintf(buf, "%s:%d", mii_sw_names[i],
|
||||||
!!(mii->sw_state & (1 << i)));
|
!!(mii->sw_state & (1 << i)));
|
||||||
printf("%-13.13s%s", buf, !(i % 6) ? "\n" : " ");
|
printf("%-13.13s%s", buf, !((i+1) % 6) ? "\n" : " ");
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
printf("RGB Video Mode: %d\n", mii->video.color_mode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!strcmp(argv[1], "reset")) {
|
if (!strcmp(argv[1], "reset")) {
|
||||||
mii_reset(mii, 0);
|
mii_reset(mii, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!strcmp(argv[1], "rgb")) {
|
||||||
|
if (argc < 3) {
|
||||||
|
printf("rgb: missing argument\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
uint8_t val = strtol(argv[2], NULL, 16);
|
||||||
|
if (val > MII_VIDEO_MODE_COUNT) {
|
||||||
|
printf("rgb: invalid mode %d\n", val);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mii->video.color_mode = val;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!strcmp(argv[1], "mem")) {
|
if (!strcmp(argv[1], "mem")) {
|
||||||
printf("mii: memory map: ");
|
printf("mii: memory map: ");
|
||||||
for (int i = 0; i < MII_BANK_COUNT; i++)
|
for (int i = 0; i < MII_BANK_COUNT; i++)
|
||||||
|
@ -241,6 +256,54 @@ _mii_mish_il(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
_mii_mish_mm(
|
||||||
|
void * param,
|
||||||
|
int argc,
|
||||||
|
const char * argv[])
|
||||||
|
{
|
||||||
|
static uint32_t addr = 0x800;
|
||||||
|
if (argv[1]) {
|
||||||
|
addr = strtol(argv[1], NULL, 16);
|
||||||
|
if (addr > 0x00100000)
|
||||||
|
addr = 0x00fff0;
|
||||||
|
}
|
||||||
|
mii_t * mii = param;
|
||||||
|
int bi = (addr >> 16) & 0xf;
|
||||||
|
if (bi > MII_BANK_COUNT) {
|
||||||
|
printf("mii: invalid bank index %d (0:7)\n", bi);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
addr &= 0xffff;
|
||||||
|
mii_bank_t * bank = &mii->bank[bi];
|
||||||
|
// addr -= bank->base;
|
||||||
|
if (!strcmp(argv[0], "mm")) {
|
||||||
|
printf("%s %04x\n", bank->name, addr);
|
||||||
|
for (int i = 0; i < 8; i++) {
|
||||||
|
printf("%06x: ", addr);
|
||||||
|
for (int j = 0; j < 16; j++)
|
||||||
|
printf("%02x ", mii_bank_peek(bank, addr++));
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!strcmp(argv[0], "mb")) {
|
||||||
|
printf("%s: %04x: ", bank->name, addr);
|
||||||
|
printf("%02x ", mii_bank_peek(bank, addr++));
|
||||||
|
printf("\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!strcmp(argv[0], "mw") || !strcmp(argv[0], "ma")) {
|
||||||
|
printf("%s: %04x: ", bank->name, addr);
|
||||||
|
uint8_t l = mii_bank_peek(bank, addr++);
|
||||||
|
uint8_t h = mii_bank_peek(bank, addr++);
|
||||||
|
printf("%02x%02x", h, l);
|
||||||
|
printf("\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_mii_mish_dm(
|
_mii_mish_dm(
|
||||||
void * param,
|
void * param,
|
||||||
|
@ -403,6 +466,7 @@ MISH_CMD_NAMES(mii, "mii");
|
||||||
MISH_CMD_HELP(mii,
|
MISH_CMD_HELP(mii,
|
||||||
"mii: access internals, trace, reset, speed, etc",
|
"mii: access internals, trace, reset, speed, etc",
|
||||||
" <default> : dump current state",
|
" <default> : dump current state",
|
||||||
|
" rgb <val>: Set RGB mode to <val>(0:color,1:green,2:amber)"
|
||||||
" reset : reset the cpu",
|
" reset : reset the cpu",
|
||||||
" t|trace : toggle trace_cpu (WARNING HUGE traces!))",
|
" t|trace : toggle trace_cpu (WARNING HUGE traces!))",
|
||||||
" mem : dump memory and bank map",
|
" mem : dump memory and bank map",
|
||||||
|
@ -442,6 +506,17 @@ MISH_CMD_HELP(dm,
|
||||||
);
|
);
|
||||||
MII_MISH(dm, _mii_mish_dm);
|
MII_MISH(dm, _mii_mish_dm);
|
||||||
|
|
||||||
|
MISH_CMD_NAMES(mm, "mm","mb","mw","ma");
|
||||||
|
MISH_CMD_HELP(mm,
|
||||||
|
"mii: dump memory, byte, word, [raw address]",
|
||||||
|
" <default>|mm <addr>: dump 64 bytes.",
|
||||||
|
" mb [<addr>]: dump one byte.",
|
||||||
|
" mw [<addr>]: dump one word.",
|
||||||
|
" ma [<addr>]: dump one address.",
|
||||||
|
" [addr]: 24 bits address addr 00 main, 01 aux"
|
||||||
|
);
|
||||||
|
MII_MISH(mm, _mii_mish_mm);
|
||||||
|
|
||||||
MISH_CMD_NAMES(step, "s","step","n","next","cont","h","halt");
|
MISH_CMD_NAMES(step, "s","step","n","next","cont","h","halt");
|
||||||
MISH_CMD_HELP(step,
|
MISH_CMD_HELP(step,
|
||||||
"mii: step instructions",
|
"mii: step instructions",
|
||||||
|
|
96
src/mii_sw.h
96
src/mii_sw.h
|
@ -8,60 +8,54 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
SW80STORE = 0xc018,
|
SWKBD = 0xc000,
|
||||||
SWVBL = 0xc019,
|
SW80STOREOFF = 0xc000,
|
||||||
SWALTCHARSET = 0xc01e,
|
SW80STOREON = 0xc001,
|
||||||
SW80COL = 0xc01f,
|
SWRAMRDOFF = 0xc002,
|
||||||
SWTEXT = 0xc01a,
|
SWRAMRDON = 0xc003,
|
||||||
SWMIXED = 0xc01b,
|
SWRAMWRTOFF = 0xc004,
|
||||||
SWPAGE2 = 0xc01c,
|
SWRAMWRTON = 0xc005,
|
||||||
SWHIRES = 0xc01d,
|
SWINTCXROMOFF = 0xc006,
|
||||||
|
SWINTCXROMON = 0xc007,
|
||||||
SW80STOREOFF = 0xc000,
|
SWALTPZOFF = 0xc008,
|
||||||
SW80STOREON = 0xc001,
|
SWALTPZON = 0xc009,
|
||||||
|
SWSLOTC3ROMOFF = 0xc00a,
|
||||||
|
SWSLOTC3ROMON = 0xc00b,
|
||||||
|
SW80COLOFF = 0xc00c,
|
||||||
|
SW80COLON = 0xc00d,
|
||||||
SWALTCHARSETOFF = 0xc00e,
|
SWALTCHARSETOFF = 0xc00e,
|
||||||
SWALTCHARSETON = 0xc00f,
|
SWALTCHARSETON = 0xc00f,
|
||||||
SW80COLOFF = 0xc00c,
|
SWAKD = 0xc010,
|
||||||
SW80COLON = 0xc00d,
|
SWBSRBANK2 = 0xc011,
|
||||||
SWTEXTOFF = 0xc050, // (AKA LORES ON)
|
SWBSRREADRAM = 0xc012,
|
||||||
SWTEXTON = 0xc051,
|
SWRAMRD = 0xc013,
|
||||||
SWMIXEDOFF = 0xc052,
|
SWRAMWRT = 0xc014,
|
||||||
SWMIXEDON = 0xc053,
|
SWINTCXROM = 0xc015,
|
||||||
SWPAGE2OFF = 0xc054,
|
SWALTPZ = 0xc016,
|
||||||
SWPAGE2ON = 0xc055,
|
SWSLOTC3ROM = 0xc017,
|
||||||
SWHIRESOFF = 0xc056,
|
SW80STORE = 0xc018,
|
||||||
SWHIRESON = 0xc057,
|
SWVBL = 0xc019,
|
||||||
|
SWALTCHARSET = 0xc01e,
|
||||||
|
SW80COL = 0xc01f,
|
||||||
|
SWTEXT = 0xc01a,
|
||||||
|
SWMIXED = 0xc01b,
|
||||||
|
SWPAGE2 = 0xc01c,
|
||||||
|
SWHIRES = 0xc01d,
|
||||||
|
SWSPEAKER = 0xc030,
|
||||||
|
SWTEXTOFF = 0xc050, // (AKA LORES ON)
|
||||||
|
SWTEXTON = 0xc051,
|
||||||
|
SWMIXEDOFF = 0xc052,
|
||||||
|
SWMIXEDON = 0xc053,
|
||||||
|
SWPAGE2OFF = 0xc054,
|
||||||
|
SWPAGE2ON = 0xc055,
|
||||||
|
SWHIRESOFF = 0xc056,
|
||||||
|
SWHIRESON = 0xc057,
|
||||||
// this one is inverted, the ON is the even address
|
// this one is inverted, the ON is the even address
|
||||||
SWDHIRESOFF = 0xc05f, // AN3_ON
|
SWDHIRESON = 0xc05e, // AN3_OFF
|
||||||
SWDHIRESON = 0xc05e, // AN3_OFF
|
SWDHIRESOFF = 0xc05f, // AN3_ON
|
||||||
SWAN3 = 0xc05e, // AN3 status
|
SWAN3 = 0xc05e, // AN3 status
|
||||||
SWAN3_REGISTER = 0xc05f, // AN3 register for video mode
|
SWAN3_REGISTER = 0xc05f, // AN3 register for video mode
|
||||||
SWRDDHIRES = 0xc07f,
|
SWRDDHIRES = 0xc07f,
|
||||||
|
|
||||||
SWRAMRDOFF = 0xc002,
|
|
||||||
SWRAMRDON = 0xc003,
|
|
||||||
SWRAMWRTOFF = 0xc004,
|
|
||||||
SWRAMWRTON = 0xc005,
|
|
||||||
SWALTPZOFF = 0xc008,
|
|
||||||
SWALTPZON = 0xc009,
|
|
||||||
SWINTCXROMOFF = 0xc006,
|
|
||||||
SWINTCXROMON = 0xc007,
|
|
||||||
SWSLOTC3ROMOFF = 0xc00a,
|
|
||||||
SWSLOTC3ROMON = 0xc00b,
|
|
||||||
SWBSRBANK2 = 0xc011,
|
|
||||||
SWBSRREADRAM = 0xc012,
|
|
||||||
|
|
||||||
SWRAMRD = 0xc013,
|
|
||||||
SWRAMWRT = 0xc014,
|
|
||||||
SWINTCXROM = 0xc015,
|
|
||||||
SWALTPZ = 0xc016,
|
|
||||||
SWSLOTC3ROM = 0xc017,
|
|
||||||
|
|
||||||
SWSPEAKER = 0xc030,
|
|
||||||
SWKBD = 0xc000,
|
|
||||||
SWAKD = 0xc010,
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -15,13 +15,20 @@
|
||||||
#define MII_VIDEO_WIDTH (280 * 2)
|
#define MII_VIDEO_WIDTH (280 * 2)
|
||||||
#define MII_VIDEO_HEIGHT (192 * 2)
|
#define MII_VIDEO_HEIGHT (192 * 2)
|
||||||
// in case padding is needed, these can be changed
|
// in case padding is needed, these can be changed
|
||||||
|
|
||||||
|
#if 0 // Loads of padding to align to power of 2 sizes
|
||||||
|
#define MII_VRAM_WIDTH (1024 * 4)
|
||||||
|
#define MII_VRAM_HEIGHT 512
|
||||||
|
#else
|
||||||
#define MII_VRAM_WIDTH (MII_VIDEO_WIDTH * 4)
|
#define MII_VRAM_WIDTH (MII_VIDEO_WIDTH * 4)
|
||||||
#define MII_VRAM_HEIGHT MII_VIDEO_HEIGHT
|
#define MII_VRAM_HEIGHT MII_VIDEO_HEIGHT
|
||||||
|
#endif
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
MII_VIDEO_COLOR = 0,
|
MII_VIDEO_COLOR = 0,
|
||||||
MII_VIDEO_GREEN,
|
MII_VIDEO_GREEN,
|
||||||
MII_VIDEO_AMBER,
|
MII_VIDEO_AMBER,
|
||||||
|
MII_VIDEO_MODE_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mii_t;
|
struct mii_t;
|
||||||
|
|
|
@ -36,9 +36,10 @@
|
||||||
#define WINDOW_WIDTH 1280
|
#define WINDOW_WIDTH 1280
|
||||||
#define WINDOW_HEIGHT 720
|
#define WINDOW_HEIGHT 720
|
||||||
|
|
||||||
|
#define POWER_OF_TWO 0
|
||||||
|
|
||||||
typedef struct mii_gl_tex_t {
|
typedef struct mii_gl_tex_t {
|
||||||
c2_rect_t frame;
|
// c2_rect_t frame;
|
||||||
GLuint id;
|
GLuint id;
|
||||||
} mii_gl_tex_t;
|
} mii_gl_tex_t;
|
||||||
|
|
||||||
|
@ -47,6 +48,7 @@ typedef struct mii_x11_t {
|
||||||
pthread_t cpu_thread;
|
pthread_t cpu_thread;
|
||||||
|
|
||||||
mui_drawable_t dr; // drawable
|
mui_drawable_t dr; // drawable
|
||||||
|
uint32_t dr_padded_y;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
|
@ -392,6 +394,7 @@ mii_x11_init(
|
||||||
ui->glContext = create_context(ui->dpy, ui->fbc, 0, True, attr);
|
ui->glContext = create_context(ui->dpy, ui->fbc, 0, True, attr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
XSync(ui->dpy, False);
|
XSync(ui->dpy, False);
|
||||||
XSetErrorHandler(old_handler);
|
XSetErrorHandler(old_handler);
|
||||||
if (gl_err || !ui->glContext)
|
if (gl_err || !ui->glContext)
|
||||||
|
@ -402,9 +405,28 @@ mii_x11_init(
|
||||||
mui_pixmap_t* pix = &ui->dr.pix;
|
mui_pixmap_t* pix = &ui->dr.pix;
|
||||||
pix->size.y = WINDOW_HEIGHT;
|
pix->size.y = WINDOW_HEIGHT;
|
||||||
pix->size.x = WINDOW_WIDTH;
|
pix->size.x = WINDOW_WIDTH;
|
||||||
pix->row_bytes = WINDOW_WIDTH * 4;
|
// annoyingly I have to make it a LOT bigger to handle that the
|
||||||
|
// non-power-of-2 texture extension is not avialable everywhere
|
||||||
|
// textures, which is a bit of a waste of memory, but oh well.
|
||||||
|
|
||||||
|
#if POWER_OF_TWO
|
||||||
|
int padded_x = 1;
|
||||||
|
int padded_y = 1;
|
||||||
|
while (padded_x < pix->size.x)
|
||||||
|
padded_x <<= 1;
|
||||||
|
while (padded_y < pix->size.y)
|
||||||
|
padded_y <<= 1;
|
||||||
|
#else
|
||||||
|
int padded_x = pix->size.x;
|
||||||
|
int padded_y = pix->size.y;
|
||||||
|
#endif
|
||||||
|
pix->row_bytes = padded_x * 4;
|
||||||
pix->bpp = 32;
|
pix->bpp = 32;
|
||||||
pix->pixels = malloc(pix->row_bytes * WINDOW_HEIGHT * (pix->bpp / 8));
|
|
||||||
|
ui->dr_padded_y = padded_y;
|
||||||
|
printf("MUI Padded UI size is %dx%d\n", padded_x, padded_y);
|
||||||
|
|
||||||
|
pix->pixels = malloc(pix->row_bytes * ui->dr_padded_y);
|
||||||
mui->screen_size = pix->size;
|
mui->screen_size = pix->size;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -631,7 +653,7 @@ mii_x11_prepare_textures(
|
||||||
mii_x11_t *ui)
|
mii_x11_t *ui)
|
||||||
{
|
{
|
||||||
mii_t * mii = &ui->video.mii;
|
mii_t * mii = &ui->video.mii;
|
||||||
mui_t * mui = &ui->video.mui;
|
// mui_t * mui = &ui->video.mui;
|
||||||
GLuint tex[2];
|
GLuint tex[2];
|
||||||
glGenTextures(2, tex);
|
glGenTextures(2, tex);
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
|
@ -658,9 +680,10 @@ mii_x11_prepare_textures(
|
||||||
glBindTexture(GL_TEXTURE_2D, ui->mui_tex.id);
|
glBindTexture(GL_TEXTURE_2D, ui->mui_tex.id);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, 4,
|
glTexImage2D(GL_TEXTURE_2D, 0, 4,
|
||||||
ui->dr.pix.row_bytes / 4,
|
ui->dr.pix.row_bytes / 4, // already power of two.
|
||||||
mui->screen_size.y, 0, GL_RGBA,
|
ui->dr_padded_y, 0, GL_RGBA,
|
||||||
GL_UNSIGNED_BYTE,
|
GL_UNSIGNED_BYTE,
|
||||||
ui->dr.pix.pixels);
|
ui->dr.pix.pixels);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
@ -730,10 +753,10 @@ mii_x11_render(
|
||||||
glTexCoord2f(ui->attr.width / (double)(ui->dr.pix.row_bytes / 4), 0);
|
glTexCoord2f(ui->attr.width / (double)(ui->dr.pix.row_bytes / 4), 0);
|
||||||
glVertex2f(ui->attr.width, 0);
|
glVertex2f(ui->attr.width, 0);
|
||||||
glTexCoord2f(ui->attr.width / (double)(ui->dr.pix.row_bytes / 4),
|
glTexCoord2f(ui->attr.width / (double)(ui->dr.pix.row_bytes / 4),
|
||||||
ui->attr.height / (double)(ui->dr.pix.size.y));
|
ui->attr.height / (double)(ui->dr_padded_y));
|
||||||
glVertex2f(ui->attr.width, ui->attr.height);
|
glVertex2f(ui->attr.width, ui->attr.height);
|
||||||
glTexCoord2f(0,
|
glTexCoord2f(0,
|
||||||
ui->attr.height / (double)(ui->dr.pix.size.y));
|
ui->attr.height / (double)(ui->dr_padded_y));
|
||||||
glVertex2f(0, ui->attr.height);
|
glVertex2f(0, ui->attr.height);
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
@ -857,6 +880,8 @@ mii_x11_reload_config(
|
||||||
ui->cpu_thread = mii_thread_start(mii);
|
ui->cpu_thread = mii_thread_start(mii);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mii_x11_t g_mii = {};
|
||||||
|
|
||||||
int
|
int
|
||||||
main(
|
main(
|
||||||
int argc,
|
int argc,
|
||||||
|
@ -866,7 +891,6 @@ main(
|
||||||
asprintf(&conf_path, "%s/.local/share/mii", getenv("HOME"));
|
asprintf(&conf_path, "%s/.local/share/mii", getenv("HOME"));
|
||||||
mkdir(conf_path, 0755);
|
mkdir(conf_path, 0755);
|
||||||
|
|
||||||
mii_x11_t g_mii = {};
|
|
||||||
mii_x11_t * ui = &g_mii;
|
mii_x11_t * ui = &g_mii;
|
||||||
mii_t * mii = &g_mii.video.mii;
|
mii_t * mii = &g_mii.video.mii;
|
||||||
bool no_config_found = false;
|
bool no_config_found = false;
|
||||||
|
@ -990,6 +1014,7 @@ main(
|
||||||
glViewport(0, 0, ui->width, ui->height);
|
glViewport(0, 0, ui->width, ui->height);
|
||||||
_mii_transition(ui);
|
_mii_transition(ui);
|
||||||
mii_x11_render(ui);
|
mii_x11_render(ui);
|
||||||
|
glFlush();
|
||||||
glXSwapBuffers(ui->dpy, ui->win);
|
glXSwapBuffers(ui->dpy, ui->win);
|
||||||
}
|
}
|
||||||
/* Wait for next frame */
|
/* Wait for next frame */
|
||||||
|
|
|
@ -333,8 +333,8 @@ mii_mui_menu_slot_menu_update(
|
||||||
mui_control_t * m = mui_control_get_by_id(mbar, FCC('f','i','l','e'));
|
mui_control_t * m = mui_control_get_by_id(mbar, FCC('f','i','l','e'));
|
||||||
mui_menu_items_t * items = mui_popupmenu_get_items(m);
|
mui_menu_items_t * items = mui_popupmenu_get_items(m);
|
||||||
|
|
||||||
printf("%s items %p count %d RO:%d\n",
|
// printf("%s items %p count %d RO:%d\n",
|
||||||
__func__, items, items? items->count : 0, items? items->read_only : 0);
|
// __func__, items, items? items->count : 0, items? items->read_only : 0);
|
||||||
|
|
||||||
mui_menu_items_clear(items);
|
mui_menu_items_clear(items);
|
||||||
if (!items->read_only)
|
if (!items->read_only)
|
||||||
|
@ -373,11 +373,6 @@ mii_mui_menu_slot_menu_update(
|
||||||
}
|
}
|
||||||
// array is NULL terminated
|
// array is NULL terminated
|
||||||
mui_menu_items_push(items, (mui_menu_item_t){});
|
mui_menu_items_push(items, (mui_menu_item_t){});
|
||||||
for (int i = 0; i < (int)items->count; i++)
|
|
||||||
printf(" %d: %s\n", i, items->e[i].title);
|
|
||||||
|
|
||||||
printf("%s items %p count %d RO:%d done\n",
|
|
||||||
__func__, items, items? items->count : 0, items? items->read_only : 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -400,4 +395,4 @@ mii_mui_menus_init(
|
||||||
mui_menubar_add_simple(mbar, "CPU",
|
mui_menubar_add_simple(mbar, "CPU",
|
||||||
FCC('c','p','u','m'),
|
FCC('c','p','u','m'),
|
||||||
m_cpu_menu);
|
m_cpu_menu);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user