store clip_rects of RenderTextures
This commit is contained in:
@@ -123,6 +123,7 @@ void rect_draw_some_item(const sf::Texture& src_gworld,rectangle src_rect,const
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::map<sf::RenderTexture*,std::vector<sf::Text>> store_scale_aware_text;
|
std::map<sf::RenderTexture*,std::vector<sf::Text>> store_scale_aware_text;
|
||||||
|
std::map<sf::RenderTexture*,rectangle> store_clip_rects;
|
||||||
|
|
||||||
static void draw_stored_scale_aware_text(sf::RenderTexture& texture, sf::RenderTarget& dest_window, rectangle targ_rect) {
|
static void draw_stored_scale_aware_text(sf::RenderTexture& texture, sf::RenderTarget& dest_window, rectangle targ_rect) {
|
||||||
// Temporarily switch target window to its unscaled view to draw scale-aware text
|
// Temporarily switch target window to its unscaled view to draw scale-aware text
|
||||||
|
@@ -242,8 +242,18 @@ void Region::setStencil(sf::RenderWindow& where) {
|
|||||||
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern std::map<sf::RenderTexture*,rectangle> store_clip_rects;
|
||||||
|
|
||||||
void clip_rect(sf::RenderTarget& where, rectangle rect) {
|
void clip_rect(sf::RenderTarget& where, rectangle rect) {
|
||||||
rect &= rectangle(where); // Make sure we don't draw out of bounds
|
rect &= rectangle(where); // Make sure we don't draw out of bounds
|
||||||
|
|
||||||
|
// Text isn't actually drawn onto Render Textures, so the render texture's clip rect
|
||||||
|
// needs to be stored externally to be applied to text later
|
||||||
|
if(dynamic_cast<sf::RenderTexture*>(&where) != nullptr){
|
||||||
|
sf::RenderTexture* p = dynamic_cast<sf::RenderTexture*>(&where);
|
||||||
|
store_clip_rects[p] = rect;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Make sure this works for the scissor test...
|
// TODO: Make sure this works for the scissor test...
|
||||||
setActiveRenderTarget(where);
|
setActiveRenderTarget(where);
|
||||||
auto viewport = where.getView().getViewport();
|
auto viewport = where.getView().getViewport();
|
||||||
@@ -259,6 +269,11 @@ void clip_region(sf::RenderWindow& where, Region& region) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void undo_clip(sf::RenderTarget& where) {
|
void undo_clip(sf::RenderTarget& where) {
|
||||||
|
if(dynamic_cast<sf::RenderTexture*>(&where) != nullptr){
|
||||||
|
sf::RenderTexture* p = dynamic_cast<sf::RenderTexture*>(&where);
|
||||||
|
store_clip_rects.erase(p);
|
||||||
|
}
|
||||||
|
|
||||||
setActiveRenderTarget(where);
|
setActiveRenderTarget(where);
|
||||||
glDisable(GL_SCISSOR_TEST);
|
glDisable(GL_SCISSOR_TEST);
|
||||||
glDisable(GL_STENCIL_TEST);
|
glDisable(GL_STENCIL_TEST);
|
||||||
|
@@ -137,6 +137,7 @@ break_info_t calculate_line_wrapping(rectangle dest_rect, std::string str, TextS
|
|||||||
|
|
||||||
// I don't know of a better way to do this than using pointers as keys.
|
// I don't know of a better way to do this than using pointers as keys.
|
||||||
extern std::map<sf::RenderTexture*,std::vector<sf::Text>> store_scale_aware_text;
|
extern std::map<sf::RenderTexture*,std::vector<sf::Text>> store_scale_aware_text;
|
||||||
|
extern std::map<sf::RenderTexture*,rectangle> store_clip_rects;
|
||||||
|
|
||||||
void clear_scale_aware_text(sf::RenderTexture& texture) {
|
void clear_scale_aware_text(sf::RenderTexture& texture) {
|
||||||
store_scale_aware_text.erase(&texture);
|
store_scale_aware_text.erase(&texture);
|
||||||
|
Reference in New Issue
Block a user