convert framebuffer to class (#19800)
* class FrameBuffer * fix build error * remove bootlogalbatross
parent
4f995b35d5
commit
6583206ed4
|
@ -12,6 +12,7 @@
|
|||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <mutex>
|
||||
#include <memory>
|
||||
#include <thread>
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
@ -183,7 +184,7 @@ struct Updater {
|
|||
|
||||
int fb_w, fb_h;
|
||||
|
||||
FramebufferState *fb = NULL;
|
||||
std::unique_ptr<FrameBuffer> fb;
|
||||
NVGcontext *vg = NULL;
|
||||
int font_regular;
|
||||
int font_semibold;
|
||||
|
@ -227,11 +228,9 @@ struct Updater {
|
|||
void ui_init() {
|
||||
touch_init(&touch);
|
||||
|
||||
fb = framebuffer_init("updater", 0x00001000, false,
|
||||
&fb_w, &fb_h);
|
||||
assert(fb);
|
||||
fb = std::make_unique<FrameBuffer>("updater", 0x00001000, false, &fb_w, &fb_h);
|
||||
|
||||
framebuffer_set_power(fb, HWC_POWER_MODE_NORMAL);
|
||||
fb->set_power(HWC_POWER_MODE_NORMAL);
|
||||
|
||||
vg = nvgCreateGLES3(NVG_ANTIALIAS | NVG_STENCIL_STROKES | NVG_DEBUG);
|
||||
assert(vg);
|
||||
|
@ -751,7 +750,7 @@ struct Updater {
|
|||
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
framebuffer_swap(fb);
|
||||
fb->swap();
|
||||
|
||||
assert(glGetError() == GL_NO_ERROR);
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "framebuffer.h"
|
||||
#include "util.h"
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cassert>
|
||||
|
||||
#include <ui/DisplayInfo.h>
|
||||
|
@ -32,7 +32,7 @@ struct FramebufferState {
|
|||
EGLContext context;
|
||||
};
|
||||
|
||||
void framebuffer_swap(FramebufferState *s) {
|
||||
void FrameBuffer::swap() {
|
||||
eglSwapBuffers(s->display, s->surface);
|
||||
assert(glGetError() == GL_NO_ERROR);
|
||||
}
|
||||
|
@ -43,17 +43,15 @@ bool set_brightness(int brightness) {
|
|||
return 0 == write_file("/sys/class/leds/lcd-backlight/brightness", bright, strlen(bright));
|
||||
}
|
||||
|
||||
void framebuffer_set_power(FramebufferState *s, int mode) {
|
||||
void FrameBuffer::set_power(int mode) {
|
||||
SurfaceComposerClient::setDisplayPowerMode(s->dtoken, mode);
|
||||
}
|
||||
|
||||
FramebufferState* framebuffer_init(
|
||||
const char* name, int32_t layer, int alpha,
|
||||
int *out_w, int *out_h) {
|
||||
FrameBuffer::FrameBuffer(const char *name, uint32_t layer, int alpha, int *out_w, int *out_h) {
|
||||
status_t status;
|
||||
int success;
|
||||
|
||||
FramebufferState *s = new FramebufferState;
|
||||
s = new FramebufferState;
|
||||
|
||||
s->session = new SurfaceComposerClient();
|
||||
assert(s->session != NULL);
|
||||
|
@ -141,6 +139,11 @@ FramebufferState* framebuffer_init(
|
|||
|
||||
if (out_w) *out_w = w;
|
||||
if (out_h) *out_h = h;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
FrameBuffer::~FrameBuffer() {
|
||||
eglDestroyContext(s->display, s->context);
|
||||
eglDestroySurface(s->display, s->surface);
|
||||
eglTerminate(s->display);
|
||||
delete s;
|
||||
}
|
||||
|
|
|
@ -1,13 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
typedef struct FramebufferState FramebufferState;
|
||||
#include <cstdlib>
|
||||
|
||||
FramebufferState* framebuffer_init(
|
||||
const char* name, int32_t layer, int alpha,
|
||||
int *out_w, int *out_h);
|
||||
|
||||
void framebuffer_set_power(FramebufferState *s, int mode);
|
||||
void framebuffer_swap(FramebufferState *s);
|
||||
bool set_brightness(int brightness);
|
||||
|
||||
/* Display power modes */
|
||||
|
@ -35,3 +29,14 @@ enum {
|
|||
* functionality. */
|
||||
HWC_POWER_MODE_DOZE_SUSPEND = 3,
|
||||
};
|
||||
|
||||
struct FramebufferState;
|
||||
class FrameBuffer {
|
||||
public:
|
||||
FrameBuffer(const char *name, uint32_t layer, int alpha, int *out_w, int *out_h);
|
||||
~FrameBuffer();
|
||||
void set_power(int mode);
|
||||
void swap();
|
||||
private:
|
||||
FramebufferState *s;
|
||||
};
|
||||
|
|
|
@ -3,7 +3,7 @@ Import('env', 'qt_env', 'arch', 'common', 'messaging', 'gpucommon', 'visionipc',
|
|||
|
||||
|
||||
src = ['ui.cc', 'paint.cc', 'sidebar.cc', '#phonelibs/nanovg/nanovg.c']
|
||||
libs = [common, 'zmq', 'capnp', 'kj', 'm', 'OpenCL', cereal, messaging, gpucommon, visionipc]
|
||||
libs = [gpucommon, common, 'zmq', 'capnp', 'kj', 'm', 'OpenCL', cereal, messaging, visionipc]
|
||||
|
||||
if qt_env is None:
|
||||
libs += ['EGL', 'GLESv3', 'gnustl_shared', 'log', 'utils', 'gui', 'hardware',
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include <math.h>
|
||||
#include <unistd.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <memory>
|
||||
#include <GLES3/gl3.h>
|
||||
#include <EGL/egl.h>
|
||||
#include <EGL/eglext.h>
|
||||
|
@ -30,7 +30,7 @@ int main(int argc, char** argv) {
|
|||
|
||||
// spinner
|
||||
int fb_w, fb_h;
|
||||
FramebufferState *fb = framebuffer_init("text", 0x00001000, false,
|
||||
std::unique_ptr<FrameBuffer> fb = std::make_unique<FrameBuffer>("text", 0x00001000, false,
|
||||
&fb_w, &fb_h);
|
||||
assert(fb);
|
||||
|
||||
|
@ -41,7 +41,7 @@ int main(int argc, char** argv) {
|
|||
assert(font >= 0);
|
||||
|
||||
// Awake
|
||||
framebuffer_set_power(fb, HWC_POWER_MODE_NORMAL);
|
||||
fb->set_power(HWC_POWER_MODE_NORMAL);
|
||||
set_brightness(255);
|
||||
|
||||
glClearColor(0.1, 0.1, 0.1, 1.0);
|
||||
|
@ -106,7 +106,7 @@ int main(int argc, char** argv) {
|
|||
|
||||
// Draw to screen
|
||||
nvgEndFrame(vg);
|
||||
framebuffer_swap(fb);
|
||||
fb->swap();
|
||||
assert(glGetError() == GL_NO_ERROR);
|
||||
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ static void handle_display_state(UIState *s, bool user_input) {
|
|||
s->awake = should_wake;
|
||||
int display_mode = s->awake ? HWC_POWER_MODE_NORMAL : HWC_POWER_MODE_OFF;
|
||||
LOGW("setting display mode %d", display_mode);
|
||||
framebuffer_set_power(s->fb, display_mode);
|
||||
s->fb->set_power(display_mode);
|
||||
|
||||
if (s->awake) {
|
||||
system("service call window 18 i32 1");
|
||||
|
@ -178,7 +178,7 @@ int main(int argc, char* argv[]) {
|
|||
// warn on sub 15fps
|
||||
LOGW("slow frame(%llu) time: %.2f", (s->sm)->frame, u2-u1);
|
||||
}
|
||||
framebuffer_swap(s->fb);
|
||||
s->fb->swap();
|
||||
}
|
||||
|
||||
handle_display_state(s, true);
|
||||
|
|
|
@ -288,9 +288,8 @@ void GLWindow::wake() {
|
|||
handle_display_state(&ui_state, true);
|
||||
}
|
||||
|
||||
FramebufferState* framebuffer_init(const char* name, int32_t layer, int alpha,
|
||||
int *out_w, int *out_h) {
|
||||
FrameBuffer::FrameBuffer(const char *name, uint32_t layer, int alpha, int *out_w, int *out_h) {
|
||||
*out_w = vwp_w;
|
||||
*out_h = vwp_h;
|
||||
return (FramebufferState*)1; // not null
|
||||
}
|
||||
FrameBuffer::~FrameBuffer() {}
|
||||
|
|
|
@ -46,8 +46,7 @@ void ui_init(UIState *s) {
|
|||
s->started = false;
|
||||
s->status = STATUS_OFFROAD;
|
||||
|
||||
s->fb = framebuffer_init("ui", 0, true, &s->fb_w, &s->fb_h);
|
||||
assert(s->fb);
|
||||
s->fb = std::make_unique<FrameBuffer>("ui", 0, true, &s->fb_w, &s->fb_h);
|
||||
|
||||
ui_nvg_init(s);
|
||||
|
||||
|
|
|
@ -144,7 +144,7 @@ typedef struct UIState {
|
|||
VisionBuf * last_frame;
|
||||
|
||||
// framebuffer
|
||||
FramebufferState *fb;
|
||||
std::unique_ptr<FrameBuffer> fb;
|
||||
int fb_w, fb_h;
|
||||
|
||||
// NVG
|
||||
|
|
Loading…
Reference in New Issue