implement document resize with menu and dialog
This commit is contained in:
@@ -203,6 +203,8 @@
|
||||
ADFD32172166AA0800F46F85 /* GeneratePreviewForURL.c in Sources */ = {isa = PBXBuildFile; fileRef = ADFD32162166AA0800F46F85 /* GeneratePreviewForURL.c */; };
|
||||
ADFD32192166AA0800F46F85 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = ADFD32182166AA0800F46F85 /* main.c */; };
|
||||
ADFD32222166AB2F00F46F85 /* QLPlugin.qlgenerator in CopyFiles */ = {isa = PBXBuildFile; fileRef = ADFD32122166AA0800F46F85 /* QLPlugin.qlgenerator */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
ADFD32272166C9A000F46F85 /* node_dialog_resize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADFD32262166C9A000F46F85 /* node_dialog_resize.cpp */; };
|
||||
ADFD32282166C9A000F46F85 /* node_dialog_resize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADFD32262166C9A000F46F85 /* node_dialog_resize.cpp */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@@ -470,6 +472,8 @@
|
||||
ADFD32182166AA0800F46F85 /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
|
||||
ADFD321A2166AA0800F46F85 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
ADFD32232166B12A00F46F85 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
ADFD32252166C9A000F46F85 /* node_dialog_resize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = node_dialog_resize.h; sourceTree = "<group>"; };
|
||||
ADFD32262166C9A000F46F85 /* node_dialog_resize.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = node_dialog_resize.cpp; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -629,6 +633,8 @@
|
||||
ADC6F4601F3AFA2A004177FA /* node_dialog_layer_rename.h */,
|
||||
ADC0EB401FC36E88004079BB /* node_dialog_picker.cpp */,
|
||||
ADC0EB411FC36E88004079BB /* node_dialog_picker.h */,
|
||||
ADFD32262166C9A000F46F85 /* node_dialog_resize.cpp */,
|
||||
ADFD32252166C9A000F46F85 /* node_dialog_resize.h */,
|
||||
AD10635F1EC7ADFA002A525F /* node_icon.cpp */,
|
||||
AD1063601EC7ADFA002A525F /* node_icon.h */,
|
||||
AD1063611EC7ADFA002A525F /* node_image_texture.cpp */,
|
||||
@@ -1270,6 +1276,7 @@
|
||||
AD0E5CDB1ECC72AD00C35669 /* font.cpp in Sources */,
|
||||
ADBC8C561FAFD0530094B339 /* app_cloud.cpp in Sources */,
|
||||
AD0E5CDA1ECC72AD00C35669 /* event.cpp in Sources */,
|
||||
ADFD32282166C9A000F46F85 /* node_dialog_resize.cpp in Sources */,
|
||||
AD0E5CCB1ECC72AD00C35669 /* node_scroll.cpp in Sources */,
|
||||
AD0E5CBF1ECC72AD00C35669 /* node_dialog_open.cpp in Sources */,
|
||||
ADE4911B1F86E65E00FB8E92 /* advancing_front.cc in Sources */,
|
||||
@@ -1408,6 +1415,7 @@
|
||||
ADD7D2A01EBF9E1C00D5A897 /* image.cpp in Sources */,
|
||||
ADD7D2A11EBF9E1C00D5A897 /* texture.cpp in Sources */,
|
||||
AD0E119C1ECA215600CDA6BB /* app_events.cpp in Sources */,
|
||||
ADFD32272166C9A000F46F85 /* node_dialog_resize.cpp in Sources */,
|
||||
ADBC8C551FAFD0520094B339 /* app_cloud.cpp in Sources */,
|
||||
ADD7D2961EBF9E1C00D5A897 /* brush.cpp in Sources */,
|
||||
ADE4911A1F86E65D00FB8E92 /* sweep.cc in Sources */,
|
||||
|
||||
@@ -71,6 +71,7 @@ add_library(
|
||||
../src/node_dialog_open.cpp
|
||||
../src/node_dialog_picker.cpp
|
||||
../src/node_dialog_layer_rename.cpp
|
||||
../src/node_dialog_resize.cpp
|
||||
../src/node_icon.cpp
|
||||
../src/node_image.cpp
|
||||
../src/node_image_texture.cpp
|
||||
|
||||
@@ -411,6 +411,28 @@
|
||||
</border>
|
||||
</layout>
|
||||
|
||||
<!-- Dialog Resize -->
|
||||
<layout id="dialog-resize">
|
||||
<border positioning="absolute" position="0 0" color=".4 .4 .4 .8" width="100%" height="100%" align="center" justify="center">
|
||||
<border thickness="1" border-color=".2" pad="3">
|
||||
<border width="400" height="30" color=".2 .2 .2 .9" dir="row" align="center" justify="center">
|
||||
<text text="Resize Document Resolution" font-face="arial" font-size="11"></text>
|
||||
</border>
|
||||
<border width="400" color="0 0 0 .9" pad="10" dir="col">
|
||||
<border dir="row" align="center" height="30" color=".2 .2 .2 1">
|
||||
<node grow="1"><text id="current-res" text="Current: 1024px" font-face="arial" font-size="11" margin="0 5 0 5"/></node>
|
||||
<text text="New Resolution:" font-face="arial" font-size="11" margin="0 5 0 5"/>
|
||||
<combobox id="resolution" width="100" height="30" text="1024" combo-list="512px,1024px,1536px,2048px" default="1"/>
|
||||
</border>
|
||||
<node height="40" grow="1" dir="row" align="flex-end" justify="flex-end">
|
||||
<button id="btn-ok" text="Resize" width="70" height="30" margin="0 10 0 0"/>
|
||||
<button id="btn-cancel" text="Cancel" width="60" height="30" pad="10"/>
|
||||
</node>
|
||||
</border>
|
||||
</border>
|
||||
</border>
|
||||
</layout>
|
||||
|
||||
<!-- Browse Dialog Popup -->
|
||||
|
||||
<layout id="dialog-browse-item">
|
||||
@@ -777,7 +799,7 @@ Here's a list of what's available in this release.
|
||||
<text text="Ctrl-N" color=".4" justify="flex-end" margin="0 10 0 10" font-face="arial" font-size="11"/>
|
||||
</button-custom>
|
||||
<button-custom id="file-import" height="40" align="center" color=".2" pad="0 0 0 10" dir="row">
|
||||
<icon icon="page_add" width="20"/>
|
||||
<icon icon="image_add" width="20"/>
|
||||
<text text="Import" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/>
|
||||
</button-custom>
|
||||
<!--
|
||||
@@ -787,7 +809,7 @@ Here's a list of what's available in this release.
|
||||
</button-custom>
|
||||
-->
|
||||
<button-custom id="file-browse" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row">
|
||||
<icon icon="page_add" width="20"/>
|
||||
<icon icon="images" width="20"/>
|
||||
<text text="Browse" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/>
|
||||
<text text="Ctrl-O" color=".4" justify="flex-end" margin="0 10 0 10" font-face="arial" font-size="11"/>
|
||||
</button-custom>
|
||||
@@ -797,18 +819,22 @@ Here's a list of what's available in this release.
|
||||
<text text="Ctrl-S" color=".4" justify="flex-end" margin="0 10 0 10" font-face="arial" font-size="11"/>
|
||||
</button-custom>
|
||||
<button-custom id="file-save-as" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row">
|
||||
<icon icon="disk" width="20"/>
|
||||
<icon icon="disk_multiple" width="20"/>
|
||||
<text text="Save As.." grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/>
|
||||
</button-custom>
|
||||
<button-custom id="file-save-ver" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row">
|
||||
<icon icon="disk" width="20"/>
|
||||
<icon icon="disk_multiple" width="20"/>
|
||||
<text text="Save Version" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/>
|
||||
<text text="Ctrl-Shift-S" color=".4" justify="flex-end" margin="0 10 0 10" font-face="arial" font-size="11"/>
|
||||
</button-custom>
|
||||
<button-custom id="file-export" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row">
|
||||
<icon icon="disk" width="20"/>
|
||||
<icon icon="picture_go" width="20"/>
|
||||
<text text="Export JPG" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/>
|
||||
</button-custom>
|
||||
<button-custom id="file-resize" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row">
|
||||
<icon icon="arrow_out" width="20"/>
|
||||
<text text="Resize Document" grow="1" margin="0 0 0 5" font-face="arial" font-size="11"/>
|
||||
</button-custom>
|
||||
<!--
|
||||
<button-custom id="file-export-cubes" text="Menu" height="40" align="center" color=".2" pad="0 0 0 10" dir="row">
|
||||
<icon icon="page_white_stack" width="20"/>
|
||||
|
||||
@@ -152,6 +152,7 @@ public:
|
||||
void dialog_export();
|
||||
void dialog_export_cubes();
|
||||
void dialog_layer_rename();
|
||||
void dialog_resize();
|
||||
|
||||
void cloud_upload();
|
||||
void cloud_upload_all();
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "app.h"
|
||||
#include "node_dialog_open.h"
|
||||
#include "node_dialog_browse.h"
|
||||
#include "node_dialog_resize.h"
|
||||
#include "node_dialog_cloud.h"
|
||||
#include "node_about.h"
|
||||
#include "node_changelog.h"
|
||||
@@ -244,8 +245,11 @@ void App::dialog_browse()
|
||||
|
||||
dialog->btn_ok->on_click = [this, dialog](Node*)
|
||||
{
|
||||
open_document(dialog->selected_path);
|
||||
dialog->destroy();
|
||||
if (dialog->is_selected())
|
||||
{
|
||||
open_document(dialog->selected_path);
|
||||
dialog->destroy();
|
||||
}
|
||||
};
|
||||
async_end();
|
||||
};
|
||||
@@ -389,6 +393,30 @@ void App::dialog_export()
|
||||
}
|
||||
}
|
||||
|
||||
void App::dialog_resize()
|
||||
{
|
||||
auto dialog = std::make_shared<NodeDialogResize>();
|
||||
dialog->m_manager = &layout;
|
||||
dialog->init();
|
||||
dialog->create();
|
||||
dialog->loaded();
|
||||
|
||||
layout[main_id]->add_child(dialog);
|
||||
layout[main_id]->update();
|
||||
|
||||
dialog->btn_ok->on_click = [this,dialog](Node*)
|
||||
{
|
||||
int res = dialog->get_resolution();
|
||||
if (canvas)
|
||||
canvas->m_canvas->resize(res, res);
|
||||
App::I.title_update();
|
||||
dialog->destroy();
|
||||
};
|
||||
|
||||
popup->mouse_release();
|
||||
popup->destroy();
|
||||
}
|
||||
|
||||
void App::dialog_export_cubes()
|
||||
{
|
||||
if (canvas)
|
||||
|
||||
@@ -429,6 +429,12 @@ void App::init_menu_file()
|
||||
dialog_export();
|
||||
popup->mouse_release();
|
||||
popup->destroy();
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-resize"))
|
||||
b->on_click = [this](Node*) {
|
||||
dialog_resize();
|
||||
popup->mouse_release();
|
||||
popup->destroy();
|
||||
};
|
||||
if (auto b = popup->find<NodeButtonCustom>("file-export-cubes"))
|
||||
b->on_click = [this](Node*) {
|
||||
|
||||
@@ -136,7 +136,11 @@ void ui::Canvas::clear(const glm::vec4& c/*={0,0,0,1}*/)
|
||||
snap_history({ 0, 1, 2, 3, 4, 5 });
|
||||
m_layers[m_current_layer_idx].clear(c);
|
||||
m_unsaved = true;
|
||||
App::I.title_update();
|
||||
}
|
||||
void ui::Canvas::clear_all()
|
||||
{
|
||||
for (auto& l : m_layers)
|
||||
l.clear({0, 0, 0, 0});
|
||||
}
|
||||
void ui::Canvas::snap_history(const std::vector<int>& planes)
|
||||
{
|
||||
@@ -908,9 +912,9 @@ void ui::Canvas::resize(int width, int height)
|
||||
m_tex2[i].create(width, height, GL_RGBA8);
|
||||
}
|
||||
for (auto& l : m_layers)
|
||||
{
|
||||
l.create(width, height, "");
|
||||
}
|
||||
l.resize(width, height);
|
||||
m_smask.create(width*2, height*2, "mask");
|
||||
m_unsaved = true;
|
||||
}
|
||||
bool ui::Canvas::create(int width, int height)
|
||||
{
|
||||
@@ -1733,12 +1737,13 @@ void ui::Canvas::project_open_thread(std::string file_path)
|
||||
|
||||
int progress = 0;
|
||||
int total = n_layers * 6;
|
||||
|
||||
|
||||
App::I.async_start();
|
||||
for (auto& l : m_layers)
|
||||
l.destroy();
|
||||
m_layers.clear();
|
||||
m_order.clear();
|
||||
//clear_all();
|
||||
resize(m_width, m_height);
|
||||
App::I.async_end();
|
||||
|
||||
@@ -1757,6 +1762,7 @@ void ui::Canvas::project_open_thread(std::string file_path)
|
||||
fread(&name_len, sizeof(int), 1, fp);
|
||||
std::string name(name_len, '\0');
|
||||
fread((char*)name.data(), name_len, 1, fp);
|
||||
snap.clear();
|
||||
for (int plane_index = 0; plane_index < 6; plane_index++)
|
||||
{
|
||||
int has_data;
|
||||
@@ -1802,6 +1808,7 @@ void ui::Canvas::project_open_thread(std::string file_path)
|
||||
tmp_layers.emplace_back();
|
||||
tmp_layers.back().m_opacity = layer_opacity;
|
||||
tmp_layers.back().create(m_width, m_height, name.c_str());
|
||||
tmp_layers.back().clear({0, 0, 0, 0});
|
||||
tmp_layers.back().restore(snap);
|
||||
tmp_order.push_back(n_order);
|
||||
App::I.async_end();
|
||||
@@ -2106,12 +2113,20 @@ void ui::Layer::restore(const Snapshot& snap)
|
||||
m_dirty_box[i] = snap.m_dirty_box[i];
|
||||
m_dirty_face[i] = snap.m_dirty_face[i];
|
||||
|
||||
m_rtt[i].recreate(); // TODO: this should not be recreated here! Sorry I messed up with this, just quick fix DON'T SHIP!!
|
||||
// TODO: this should not be recreated here!
|
||||
// Sorry I messed up with this,
|
||||
// it's just a quick fix DON'T SHIP!!
|
||||
//m_rtt[i].recreate();
|
||||
|
||||
m_rtt[i].bindTexture();
|
||||
glm::vec2 box_sz = zw(m_dirty_box[i]) - xy(m_dirty_box[i]);
|
||||
glTexSubImage2D(GL_TEXTURE_2D, 0, m_dirty_box[i].x, m_dirty_box[i].y, box_sz.x, box_sz.y, GL_RGBA, GL_UNSIGNED_BYTE, snap.image[i].get());
|
||||
glTexSubImage2D(GL_TEXTURE_2D, 0,
|
||||
m_dirty_box[i].x, m_dirty_box[i].y,
|
||||
box_sz.x, box_sz.y, GL_RGBA, GL_UNSIGNED_BYTE,
|
||||
snap.image[i].get());
|
||||
m_rtt[i].unbindTexture();
|
||||
LOG("restore face %d - %d bytes (%dx%d)", i, (int)box_sz.x * (int)box_sz.y * 4, (int)box_sz.x, (int)box_sz.y);
|
||||
LOG("restore face %d - %d bytes (%dx%d)", i,
|
||||
(int)box_sz.x * (int)box_sz.y * 4, (int)box_sz.x, (int)box_sz.y);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2195,3 +2210,16 @@ bool ui::Layer::create(int width, int height, std::string name)
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void ui::Layer::resize(int width, int height)
|
||||
{
|
||||
glm::vec2 ratio = glm::vec2(width, height) / glm::vec2(w, h);
|
||||
w = width;
|
||||
h = height;
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
m_rtt[i].resize(width, height);
|
||||
m_dirty_box[i] = m_dirty_box[i] * glm::vec4(ratio, ratio);
|
||||
//m_dirty_face[i] = true;
|
||||
}
|
||||
}
|
||||
|
||||
16
src/canvas.h
16
src/canvas.h
@@ -29,12 +29,27 @@ public:
|
||||
std::unique_ptr<uint8_t[]> image[6] = SIXPLETTE(0);
|
||||
glm::vec4 m_dirty_box[6] = SIXPLETTE(glm::vec4(0));
|
||||
bool m_dirty_face[6] = SIXPLETTE(false);
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
void create(int w, int h)
|
||||
{
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
image[i] = std::make_unique<uint8_t[]>(w*h*4);
|
||||
std::fill_n(image[i].get(), w*h*4, 0);
|
||||
}
|
||||
}
|
||||
void clear()
|
||||
{
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
m_dirty_face[i] = false;
|
||||
m_dirty_box[i] = glm::vec4(0);
|
||||
std::fill_n(image[i].get(), width*height*4, 0);
|
||||
}
|
||||
}
|
||||
};
|
||||
void resize(int width, int height);
|
||||
bool create(int width, int height, std::string name);
|
||||
void clear(const glm::vec4& c);
|
||||
Snapshot snapshot(std::string data_path);
|
||||
@@ -182,6 +197,7 @@ public:
|
||||
void stroke_cancel();
|
||||
void stroke_commit();
|
||||
void clear(const glm::vec4& color = { 1, 1, 1, 0 });
|
||||
void clear_all();
|
||||
void pick_start();
|
||||
void pick_update(int plane);
|
||||
glm::vec4 pick_get(glm::vec2 canvas_loc);
|
||||
|
||||
@@ -61,6 +61,9 @@ void NodeDialogBrowse::init_controls()
|
||||
else
|
||||
{
|
||||
current = nullptr;
|
||||
selected_path = "";
|
||||
selected_file = "";
|
||||
selected_name = "";
|
||||
}
|
||||
Asset::delete_file(path);
|
||||
msgbox->destroy();
|
||||
@@ -108,6 +111,11 @@ void NodeDialogBrowse::init_controls()
|
||||
// }
|
||||
}
|
||||
|
||||
bool NodeDialogBrowse::is_selected()
|
||||
{
|
||||
return current != nullptr;
|
||||
}
|
||||
|
||||
void NodeDialogBrowse::loaded()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -43,4 +43,5 @@ public:
|
||||
virtual void init() override;
|
||||
void init_controls();
|
||||
virtual void loaded() override;
|
||||
bool is_selected();
|
||||
};
|
||||
|
||||
54
src/node_dialog_resize.cpp
Normal file
54
src/node_dialog_resize.cpp
Normal file
@@ -0,0 +1,54 @@
|
||||
#include "pch.h"
|
||||
#include "log.h"
|
||||
#include "node_dialog_resize.h"
|
||||
#include "canvas.h"
|
||||
#include "node_image_texture.h"
|
||||
#include "app.h"
|
||||
#include <array>
|
||||
|
||||
Node* NodeDialogResize::clone_instantiate() const
|
||||
{
|
||||
return new NodeDialogResize();
|
||||
}
|
||||
|
||||
void NodeDialogResize::clone_finalize(Node* dest) const
|
||||
{
|
||||
NodeDialogResize* n = static_cast<NodeDialogResize*>(dest);
|
||||
n->init_controls();
|
||||
}
|
||||
|
||||
void NodeDialogResize::init()
|
||||
{
|
||||
auto tpl = static_cast<const NodeBorder*>(init_template("dialog-resize"));
|
||||
m_color = tpl->m_color;
|
||||
m_border_color = tpl->m_border_color;;
|
||||
m_thinkness = tpl->m_thinkness;;
|
||||
init_controls();
|
||||
}
|
||||
|
||||
void NodeDialogResize::init_controls()
|
||||
{
|
||||
btn_ok = find<NodeButton>("btn-ok");
|
||||
btn_cancel = find<NodeButton>("btn-cancel");
|
||||
combo = find<NodeComboBox>("resolution");
|
||||
text = find<NodeText>("current-res");
|
||||
resolution = ui::Canvas::I->m_width;
|
||||
static char txt[128];
|
||||
sprintf(txt, "Current: %dpx", resolution);
|
||||
text->set_text(txt);
|
||||
btn_cancel->on_click = [this](Node*) {
|
||||
destroy();
|
||||
};
|
||||
}
|
||||
|
||||
void NodeDialogResize::loaded()
|
||||
{
|
||||
// ui::Image thumb = ui::Canvas::I->thumbnail_read(data_path);
|
||||
// auto image_tex = find<NodeImageTexture>("thumb-tex");
|
||||
// image_tex->tex.create(thumb);
|
||||
}
|
||||
|
||||
int NodeDialogResize::get_resolution()
|
||||
{
|
||||
return combo ? res_map[combo->m_current_index] : 512;
|
||||
}
|
||||
22
src/node_dialog_resize.h
Normal file
22
src/node_dialog_resize.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
#include "node_border.h"
|
||||
#include "node_button.h"
|
||||
#include "node_combobox.h"
|
||||
#include "node_text.h"
|
||||
|
||||
class NodeDialogResize : public NodeBorder
|
||||
{
|
||||
public:
|
||||
const std::array<int, 4> res_map{512, 1024, 1536, 2048};
|
||||
NodeButton* btn_cancel;
|
||||
NodeButton* btn_ok;
|
||||
NodeComboBox* combo;
|
||||
NodeText* text;
|
||||
int resolution;
|
||||
virtual Node* clone_instantiate() const override;
|
||||
virtual void clone_finalize(Node* dest) const override;
|
||||
virtual void init() override;
|
||||
void init_controls();
|
||||
virtual void loaded() override;
|
||||
int get_resolution();
|
||||
};
|
||||
29
src/rtt.cpp
29
src/rtt.cpp
@@ -15,6 +15,34 @@ RTT::~RTT()
|
||||
//destroy();
|
||||
}
|
||||
|
||||
void RTT::resize(int width, int height)
|
||||
{
|
||||
RTT new_rtt;
|
||||
|
||||
glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldDFboID);
|
||||
glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &oldRFboID);
|
||||
|
||||
new_rtt.create(width, height, -1, int_fmt);
|
||||
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, new_rtt.fboID);
|
||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, fboID);
|
||||
glBlitFramebuffer(0, 0, w, h, 0, 0, new_rtt.w, new_rtt.h, GL_COLOR_BUFFER_BIT, GL_LINEAR);
|
||||
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, oldDFboID);
|
||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, oldRFboID);
|
||||
|
||||
destroy();
|
||||
|
||||
oldRFboID = 0;
|
||||
oldDFboID = 0;
|
||||
fboID = new_rtt.fboID;
|
||||
rboID = new_rtt.rboID;
|
||||
texID = new_rtt.texID;
|
||||
int_fmt = new_rtt.int_fmt;
|
||||
w = new_rtt.w;
|
||||
h = new_rtt.h;
|
||||
}
|
||||
|
||||
void RTT::destroy()
|
||||
{
|
||||
if (rboID)
|
||||
@@ -47,6 +75,7 @@ bool RTT::create(int width, int height, int tex/* = -1*/, GLint internal_format)
|
||||
|
||||
w = width;
|
||||
h = height;
|
||||
int_fmt = internal_format;
|
||||
|
||||
if (tex == -1)
|
||||
{
|
||||
|
||||
@@ -8,6 +8,7 @@ class RTT
|
||||
GLuint fboID = 0;
|
||||
GLuint rboID = 0;
|
||||
GLuint texID = 0;
|
||||
GLint int_fmt = 0;
|
||||
int w = 0;
|
||||
int h = 0;
|
||||
|
||||
@@ -16,6 +17,7 @@ public:
|
||||
~RTT();
|
||||
|
||||
void destroy();
|
||||
void resize(int width, int height);
|
||||
bool create(int width, int height, int tex = -1, GLint internal_format = GL_RGBA8);
|
||||
bool recreate() { return create(w, h); }
|
||||
void clear(glm::vec4 color = glm::vec4(0));
|
||||
|
||||
Reference in New Issue
Block a user