1
Cario (타깃 OpenGL)를 렌더러로 사용하는 선반 용 텍스트 영역 클래스가 있습니까?카디오 용 텍스트 영역 : OpenGL
텍스트 영역이란 단어 줄 바꿈과 너비 및 높이 제약이있는 여러 줄 문자 입력란을 의미합니다. 이 클래스를 사용해야하는 코드는 C++로 작성되었습니다.
Cario (타깃 OpenGL)를 렌더러로 사용하는 선반 용 텍스트 영역 클래스가 있습니까?카디오 용 텍스트 영역 : OpenGL
텍스트 영역이란 단어 줄 바꿈과 너비 및 높이 제약이있는 여러 줄 문자 입력란을 의미합니다. 이 클래스를 사용해야하는 코드는 C++로 작성되었습니다.
하나의 해결책은 pango의 카이로 바인딩을 사용하는 것입니다. 그것을 사용하면 매우 혼란 스러울 수 있으므로 정말 빠릅니다. 원한다면 C++로 클래스를 만들 수 있습니다.
#include <pango/pangocairo.h>
// Pango context
PangoContext* pangoContext = pango_font_map_create_context(
pango_cairo_font_map_get_default());
// Layout and attributes
PangoLayout* pangoLayout = pango_layout_new(pangoContext);
pango_layout_set_wrap(pangoLayout, PANGO_WRAP_WORD_CHAR);
pango_layout_set_width(pangoLayout, maxWidth * PANGO_SCALE);
pango_layout_set_height(pangoLayout, maxHeight * PANGO_SCALE);
// Set font
PangoFontDescription* fontDesc =
pango_font_description_from_string("Verdana 10");
pango_layout_set_font_description(pangoLayout, fontDesc);
pango_font_description_free(fontDesc);
// Set text to render
pango_layout_set_text(pangoLayout, text.data(), text.length());
// Allocate buffer
const cairo_format_t format = CAIRO_FORMAT_A8;
const int stride = cairo_format_stride_for_width(format, maxWidth);
GLubyte* buffer = new GLubyte[stride * maxHeight];
std::fill(buffer, buffer + stride * maxHeight, 0);
// Create cairo surface for buffer
cairo_surface_t* crSurface = cairo_image_surface_create_for_data(
buffer, format, maxWidth, maxHeight, stride);
if (cairo_surface_status(crSurface) != CAIRO_STATUS_SUCCESS) {
// Error
}
// Create cairo context
cairo_t* crContext = cairo_create(crSurface);
if (cairo_status(crContext) != CAIRO_STATUS_SUCCESS) {
// Error
}
// Draw
cairo_set_source_rgb(crContext, 1.0, 1.0, 1.0);
pango_cairo_show_layout(crContext, pangoLayout);
// Cleanup
cairo_destroy(crContext);
cairo_surface_destroy(crSurface);
g_object_unref(pangoLayout);
g_object_unref(pangoContext);
// TODO: you can do whatever you want with buffer now
// copy on the texture maybe?
delete[] buffer;
이 경우 버퍼에는 8 비트 알파 채널 값만 포함됩니다. 당신이 다른 것을 원한다면 형식 변수로 바이올린을하십시오. 컴파일 중 ... 에 pkg-config --cflags --libs pangocairo
해야합니다. 나는 창문에 대해서 모른다.