Add dpi to edit.js

Also, cap the maximum webEntity texture size to 4096
This commit is contained in:
Anthony J. Thibault 2016-08-10 16:25:20 -07:00
parent 31ed378dbf
commit d607abc8f7
4 changed files with 26 additions and 3 deletions

View file

@ -33,6 +33,8 @@ static const uint32_t MAX_CONCURRENT_WEB_VIEWS = 100;
// If a web-view hasn't been rendered for 30 seconds, de-allocate the framebuffer // If a web-view hasn't been rendered for 30 seconds, de-allocate the framebuffer
static uint64_t MAX_NO_RENDER_INTERVAL = 30 * USECS_PER_SECOND; static uint64_t MAX_NO_RENDER_INTERVAL = 30 * USECS_PER_SECOND;
static int MAX_WINDOW_SIZE = 4096;
EntityItemPointer RenderableWebEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { EntityItemPointer RenderableWebEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) {
EntityItemPointer entity{ new RenderableWebEntityItem(entityID) }; EntityItemPointer entity{ new RenderableWebEntityItem(entityID) };
entity->setProperties(properties); entity->setProperties(properties);
@ -98,6 +100,19 @@ bool RenderableWebEntityItem::buildWebSurface(EntityTreeRenderer* renderer) {
return true; return true;
} }
glm::vec2 RenderableWebEntityItem::getWindowSize() const {
glm::vec2 dims = glm::vec2(getDimensions());
dims *= METERS_TO_INCHES * _dpi;
// ensure no side is never larger then MAX_WINDOW_SIZE
float max = (dims.x > dims.y) ? dims.x : dims.y;
if (max > MAX_WINDOW_SIZE) {
dims *= MAX_WINDOW_SIZE / max;
}
return dims;
}
void RenderableWebEntityItem::render(RenderArgs* args) { void RenderableWebEntityItem::render(RenderArgs* args) {
checkFading(); checkFading();
@ -123,13 +138,13 @@ void RenderableWebEntityItem::render(RenderArgs* args) {
} }
_lastRenderTime = usecTimestampNow(); _lastRenderTime = usecTimestampNow();
glm::vec2 dims = glm::vec2(getDimensions());
dims *= METERS_TO_INCHES * _dpi; glm::vec2 windowSize = getWindowSize();
// The offscreen surface is idempotent for resizes (bails early // The offscreen surface is idempotent for resizes (bails early
// if it's a no-op), so it's safe to just call resize every frame // if it's a no-op), so it's safe to just call resize every frame
// without worrying about excessive overhead. // without worrying about excessive overhead.
_webSurface->resize(QSize(dims.x, dims.y)); _webSurface->resize(QSize(windowSize.x, windowSize.y));
PerformanceTimer perfTimer("RenderableWebEntityItem::render"); PerformanceTimer perfTimer("RenderableWebEntityItem::render");
Q_ASSERT(getType() == EntityTypes::Web); Q_ASSERT(getType() == EntityTypes::Web);

View file

@ -47,6 +47,7 @@ public:
private: private:
bool buildWebSurface(EntityTreeRenderer* renderer); bool buildWebSurface(EntityTreeRenderer* renderer);
void destroyWebSurface(); void destroyWebSurface();
glm::vec2 getWindowSize() const;
OffscreenQmlSurface* _webSurface{ nullptr }; OffscreenQmlSurface* _webSurface{ nullptr };
QMetaObject::Connection _connection; QMetaObject::Connection _connection;

View file

@ -543,6 +543,10 @@
<label for="property-web-source-url">Source URL</label> <label for="property-web-source-url">Source URL</label>
<input type="text" id="property-web-source-url"> <input type="text" id="property-web-source-url">
</div> </div>
<div class="web-group web-section property dpi ">
<label for="property-web-dpi">Resolution (DPI)</label>
<input type="number" id="property-web-dpi">
</div>
<div class="section-header light-group light-section"> <div class="section-header light-group light-section">

View file

@ -427,6 +427,7 @@ function loaded() {
var elWebSections = document.querySelectorAll(".web-section"); var elWebSections = document.querySelectorAll(".web-section");
allSections.push(elWebSections); allSections.push(elWebSections);
var elWebSourceURL = document.getElementById("property-web-source-url"); var elWebSourceURL = document.getElementById("property-web-source-url");
var elWebDPI = document.getElementById("property-web-dpi");
var elDescription = document.getElementById("property-description"); var elDescription = document.getElementById("property-description");
@ -706,6 +707,7 @@ function loaded() {
} }
elWebSourceURL.value = properties.sourceUrl; elWebSourceURL.value = properties.sourceUrl;
elWebDPI.value = properties.dpi;
} else if (properties.type == "Text") { } else if (properties.type == "Text") {
for (var i = 0; i < elTextSections.length; i++) { for (var i = 0; i < elTextSections.length; i++) {
elTextSections[i].style.display = 'table'; elTextSections[i].style.display = 'table';
@ -959,6 +961,7 @@ function loaded() {
elShape.addEventListener('change', createEmitTextPropertyUpdateFunction('shape')); elShape.addEventListener('change', createEmitTextPropertyUpdateFunction('shape'));
elWebSourceURL.addEventListener('change', createEmitTextPropertyUpdateFunction('sourceUrl')); elWebSourceURL.addEventListener('change', createEmitTextPropertyUpdateFunction('sourceUrl'));
elWebDPI.addEventListener('change', createEmitNumberPropertyUpdateFunction('dpi'));
elModelURL.addEventListener('change', createEmitTextPropertyUpdateFunction('modelURL')); elModelURL.addEventListener('change', createEmitTextPropertyUpdateFunction('modelURL'));
elShapeType.addEventListener('change', createEmitTextPropertyUpdateFunction('shapeType')); elShapeType.addEventListener('change', createEmitTextPropertyUpdateFunction('shapeType'));