mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
Remove VGA text mode support from libdispd.
This commit is contained in:
parent
0e577950c0
commit
49e2c933af
6 changed files with 10 additions and 103 deletions
|
@ -38,8 +38,6 @@ struct dispd_framebuffer
|
|||
int bpp;
|
||||
int width;
|
||||
int height;
|
||||
bool is_vga;
|
||||
bool is_rgba;
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
|
|
@ -67,31 +67,8 @@ bool dispd_detach_session(struct dispd_session* session)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool dispd_session_setup_game_vga(struct dispd_session* session)
|
||||
{
|
||||
if ( session->is_vga )
|
||||
return true;
|
||||
if ( session->is_rgba )
|
||||
return false;
|
||||
if ( session->current_window )
|
||||
return false;
|
||||
struct dispmsg_get_crtc_mode msg;
|
||||
msg.msgid = DISPMSG_GET_CRTC_MODE;
|
||||
msg.device = session->device;
|
||||
msg.connector = session->connector;
|
||||
if ( dispmsg_issue(&msg, sizeof(msg)) != 0 )
|
||||
return false;
|
||||
if ( (session->is_vga = !(msg.mode.control & 1)) )
|
||||
return true;
|
||||
error(0, 0, "This program requires a VGA Text Mode buffer, but you are "
|
||||
"currently using an incompatible (perhaps graphics) mode.");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dispd_session_setup_game_rgba(struct dispd_session* session)
|
||||
{
|
||||
if ( session->is_vga )
|
||||
return false;
|
||||
if ( session->is_rgba )
|
||||
return true;
|
||||
if ( session->current_window )
|
||||
|
|
|
@ -35,7 +35,6 @@ struct dispd_session
|
|||
uint64_t device;
|
||||
uint64_t connector;
|
||||
struct dispd_window* current_window;
|
||||
bool is_vga;
|
||||
bool is_rgba;
|
||||
};
|
||||
|
||||
|
|
|
@ -39,23 +39,6 @@
|
|||
#include "session.h"
|
||||
#include "window.h"
|
||||
|
||||
extern "C"
|
||||
struct dispd_window* dispd_create_window_game_vga(struct dispd_session* session)
|
||||
{
|
||||
if ( session->current_window )
|
||||
return NULL;
|
||||
if ( !session->is_vga )
|
||||
return NULL;
|
||||
size_t size = sizeof(struct dispd_window);
|
||||
struct dispd_window* window = (struct dispd_window*) malloc(size);
|
||||
if ( !window )
|
||||
return NULL;
|
||||
memset(window, 0, sizeof(*window));
|
||||
window->session = session;
|
||||
window->is_vga = true;
|
||||
return session->current_window = window;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
struct dispd_window* dispd_create_window_game_rgba(struct dispd_session* session)
|
||||
{
|
||||
|
@ -69,7 +52,6 @@ struct dispd_window* dispd_create_window_game_rgba(struct dispd_session* session
|
|||
return NULL;
|
||||
memset(window, 0, sizeof(*window));
|
||||
window->session = session;
|
||||
window->is_rgba = true;
|
||||
return session->current_window = window;
|
||||
}
|
||||
|
||||
|
@ -105,28 +87,7 @@ static void return_buffer(struct dispd_window* window, uint8_t* b, size_t size)
|
|||
window->cached_buffer_size = size;
|
||||
}
|
||||
|
||||
static
|
||||
struct dispd_framebuffer* disp_begin_render_vga(struct dispd_window* window)
|
||||
{
|
||||
size_t size = sizeof(struct dispd_framebuffer);
|
||||
struct dispd_framebuffer* fb = (struct dispd_framebuffer*) malloc(size);
|
||||
if ( !fb )
|
||||
return NULL;
|
||||
memset(fb, 0, sizeof(*fb));
|
||||
fb->is_vga = true;
|
||||
fb->window = window;
|
||||
fb->width = 80;
|
||||
fb->height = 25;
|
||||
fb->bpp = 16;
|
||||
fb->pitch = fb->width * fb->bpp / 8;
|
||||
fb->datasize = fb->pitch * fb->height;
|
||||
fb->data = (uint8_t*) request_buffer(window, fb->datasize);
|
||||
if ( !fb->data ) { free(fb); return NULL; }
|
||||
return fb;
|
||||
}
|
||||
|
||||
static
|
||||
struct dispd_framebuffer* disp_begin_render_rgba(struct dispd_window* window)
|
||||
struct dispd_framebuffer* dispd_begin_render(struct dispd_window* window)
|
||||
{
|
||||
struct dispmsg_get_crtc_mode msg;
|
||||
msg.msgid = DISPMSG_GET_CRTC_MODE;
|
||||
|
@ -140,7 +101,6 @@ struct dispd_framebuffer* disp_begin_render_rgba(struct dispd_window* window)
|
|||
return NULL;
|
||||
memset(fb, 0, sizeof(*fb));
|
||||
fb->window = window;
|
||||
fb->is_rgba = true;
|
||||
fb->width = msg.mode.view_xres;
|
||||
fb->height = msg.mode.view_yres;
|
||||
fb->bpp = 32;
|
||||
|
@ -151,41 +111,18 @@ struct dispd_framebuffer* disp_begin_render_rgba(struct dispd_window* window)
|
|||
return fb;
|
||||
}
|
||||
|
||||
|
||||
struct dispd_framebuffer* dispd_begin_render(struct dispd_window* window)
|
||||
{
|
||||
if ( window->is_vga )
|
||||
return disp_begin_render_vga(window);
|
||||
if ( window->is_rgba )
|
||||
return disp_begin_render_rgba(window);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool dispd_finish_render(struct dispd_framebuffer* fb)
|
||||
{
|
||||
struct dispd_window* window = fb->window;
|
||||
bool ret = false;
|
||||
if ( window->is_vga )
|
||||
{
|
||||
int fd = open("/dev/vga", O_WRONLY);
|
||||
if ( 0 <= fd )
|
||||
{
|
||||
if ( writeall(fd, fb->data, fb->datasize) == fb->datasize )
|
||||
ret = true;
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
else if ( window->is_rgba )
|
||||
{
|
||||
struct dispmsg_write_memory msg;
|
||||
msg.msgid = DISPMSG_WRITE_MEMORY;
|
||||
msg.device = window->session->device;
|
||||
msg.offset = 0;
|
||||
msg.size = fb->datasize;
|
||||
msg.src = fb->data;
|
||||
if ( dispmsg_issue(&msg, sizeof(msg)) == 0 )
|
||||
ret = true;
|
||||
}
|
||||
struct dispmsg_write_memory msg;
|
||||
msg.msgid = DISPMSG_WRITE_MEMORY;
|
||||
msg.device = window->session->device;
|
||||
msg.offset = 0;
|
||||
msg.size = fb->datasize;
|
||||
msg.src = fb->data;
|
||||
if ( dispmsg_issue(&msg, sizeof(msg)) == 0 )
|
||||
ret = true;
|
||||
return_buffer(window, fb->data, fb->datasize);
|
||||
free(fb);
|
||||
return ret;
|
||||
|
@ -203,7 +140,7 @@ size_t dispd_get_framebuffer_pitch(struct dispd_framebuffer* fb)
|
|||
|
||||
int dispd_get_framebuffer_format(struct dispd_framebuffer* fb)
|
||||
{
|
||||
return fb->is_vga ? 0 : fb->bpp;
|
||||
return fb->bpp;
|
||||
}
|
||||
|
||||
int dispd_get_framebuffer_height(struct dispd_framebuffer* fb)
|
||||
|
|
|
@ -34,8 +34,6 @@ struct dispd_window
|
|||
struct dispd_session* session;
|
||||
uint8_t* cached_buffer;
|
||||
size_t cached_buffer_size;
|
||||
bool is_vga;
|
||||
bool is_rgba;
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
|
|
@ -44,10 +44,8 @@ bool dispd_initialize(int* argc, char*** argv);
|
|||
struct dispd_session* dispd_attach_default_session();
|
||||
bool dispd_detach_session(struct dispd_session* session);
|
||||
|
||||
bool dispd_session_setup_game_vga(struct dispd_session* session);
|
||||
bool dispd_session_setup_game_rgba(struct dispd_session* session);
|
||||
|
||||
struct dispd_window* dispd_create_window_game_vga(struct dispd_session* session);
|
||||
struct dispd_window* dispd_create_window_game_rgba(struct dispd_session* session);
|
||||
bool dispd_destroy_window(struct dispd_window* window);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue