Merge branch 'master' of github.com:highfidelity/hifi into acceleration-and-owner-in-wire-protocol

This commit is contained in:
Seth Alves 2015-04-08 15:39:40 -07:00
commit 2448051c75
8 changed files with 67 additions and 54 deletions

View file

@ -338,7 +338,7 @@ var toolBar = (function () {
} }
if (newCubeButton === toolBar.clicked(clickedOverlay)) { if (newCubeButton === toolBar.clicked(clickedOverlay)) {
var position = Vec3.sum(MyAvatar.position, Vec3.multiply(Quat.getFront(MyAvatar.orientation), SPAWN_DISTANCE)); var position = getPositionToCreateEntity();
if (position.x > 0 && position.y > 0 && position.z > 0) { if (position.x > 0 && position.y > 0 && position.z > 0) {
placingEntityID = Entities.addEntity({ placingEntityID = Entities.addEntity({
@ -355,7 +355,7 @@ var toolBar = (function () {
} }
if (newSphereButton === toolBar.clicked(clickedOverlay)) { if (newSphereButton === toolBar.clicked(clickedOverlay)) {
var position = Vec3.sum(MyAvatar.position, Vec3.multiply(Quat.getFront(MyAvatar.orientation), SPAWN_DISTANCE)); var position = getPositionToCreateEntity();
if (position.x > 0 && position.y > 0 && position.z > 0) { if (position.x > 0 && position.y > 0 && position.z > 0) {
placingEntityID = Entities.addEntity({ placingEntityID = Entities.addEntity({
@ -371,7 +371,7 @@ var toolBar = (function () {
} }
if (newLightButton === toolBar.clicked(clickedOverlay)) { if (newLightButton === toolBar.clicked(clickedOverlay)) {
var position = Vec3.sum(MyAvatar.position, Vec3.multiply(Quat.getFront(MyAvatar.orientation), SPAWN_DISTANCE)); var position = getPositionToCreateEntity();
if (position.x > 0 && position.y > 0 && position.z > 0) { if (position.x > 0 && position.y > 0 && position.z > 0) {
placingEntityID = Entities.addEntity({ placingEntityID = Entities.addEntity({
@ -395,7 +395,7 @@ var toolBar = (function () {
if (newTextButton === toolBar.clicked(clickedOverlay)) { if (newTextButton === toolBar.clicked(clickedOverlay)) {
var position = Vec3.sum(MyAvatar.position, Vec3.multiply(Quat.getFront(MyAvatar.orientation), SPAWN_DISTANCE)); var position = getPositionToCreateEntity();
if (position.x > 0 && position.y > 0 && position.z > 0) { if (position.x > 0 && position.y > 0 && position.z > 0) {
placingEntityID = Entities.addEntity({ placingEntityID = Entities.addEntity({
@ -947,6 +947,19 @@ function handeMenuEvent(menuItem) {
tooltip.show(false); tooltip.show(false);
} }
function getPositionToCreateEntity() {
var distance = cameraManager.enabled ? cameraManager.zoomDistance : DEFAULT_ENTITY_DRAG_DROP_DISTANCE;
var direction = Quat.getFront(Camera.orientation);
var offset = Vec3.multiply(distance, direction);
var position = Vec3.sum(Camera.position, offset);
position.x = Math.max(0, position.x);
position.y = Math.max(0, position.y);
position.z = Math.max(0, position.z);
return position;
}
function importSVO(importURL) { function importSVO(importURL) {
Overlays.editOverlay(importingSVOTextOverlay, { visible: true }); Overlays.editOverlay(importingSVOTextOverlay, { visible: true });
Overlays.editOverlay(importingSVOImageOverlay, { visible: true }); Overlays.editOverlay(importingSVOImageOverlay, { visible: true });
@ -954,14 +967,7 @@ function importSVO(importURL) {
var success = Clipboard.importEntities(importURL); var success = Clipboard.importEntities(importURL);
if (success) { if (success) {
var distance = cameraManager.enabled ? cameraManager.zoomDistance : DEFAULT_ENTITY_DRAG_DROP_DISTANCE; var position = getPositionToCreateEntity();
var direction = Quat.getFront(Camera.orientation);
var offset = Vec3.multiply(distance, direction);
var position = Vec3.sum(Camera.position, offset);
position.x = Math.max(0, position.x);
position.y = Math.max(0, position.y);
position.z = Math.max(0, position.z);
var pastedEntityIDs = Clipboard.pasteEntities(position); var pastedEntityIDs = Clipboard.pasteEntities(position);

View file

@ -531,17 +531,17 @@
</div> </div>
</div> </div>
<div class="property"> <div class="property">
<div class="label">Locked</div> <span class="label">Locked</span>
<div class="value"> <span class="value">
<input type='checkbox' id="property-locked"> <input type='checkbox' id="property-locked">
</div> </span>
</div> </div>
<div class="property"> <div class="property">
<div class="label">Visible</div> <span class="label">Visible</span>
<div class="value"> <span class="value">
<input type='checkbox' id="property-visible"> <input type='checkbox' id="property-visible">
</div> </span>
</div> </div>
<div class="property"> <div class="property">
@ -648,17 +648,17 @@
</div> </div>
<div class="property"> <div class="property">
<div class="label">Ignore For Collisions</div> <span class="label">Ignore For Collisions</span>
<div class="value"> <span class="value">
<input type='checkbox' id="property-ignore-for-collisions"></input> <input type='checkbox' id="property-ignore-for-collisions"></input>
</div> </span>
</div> </div>
<div class="property"> <div class="property">
<div class="label">Collisions Will Move</div> <span class="label">Collisions Will Move</span>
<div class="value"> <span class="value">
<input type='checkbox' id="property-collisions-will-move"></input> <input type='checkbox' id="property-collisions-will-move"></input>
</div> </span>
</div> </div>
<div class="property"> <div class="property">
@ -713,10 +713,10 @@
</div> </div>
</div> </div>
<div class="model-section property"> <div class="model-section property">
<div class="label">Animation Playing</div> <span class="label">Animation Playing</span>
<div class="value"> <span class="value">
<input type='checkbox' id="property-model-animation-playing"> <input type='checkbox' id="property-model-animation-playing">
</div> </span>
</div> </div>
<div class="model-section property"> <div class="model-section property">
<div class="label">Animation FPS</div> <div class="label">Animation FPS</div>
@ -791,10 +791,10 @@
</div> </div>
<div class="light-section property"> <div class="light-section property">
<div class="label">Spot Light</div> <span class="label">Spot Light</span>
<div class="value"> <span class="value">
<input type='checkbox' id="property-light-spot-light"> <input type='checkbox' id="property-light-spot-light">
</div> </span>
</div> </div>
<div class="light-section property"> <div class="light-section property">
<div class="label">Color</div> <div class="label">Color</div>

View file

@ -194,6 +194,10 @@ input:disabled, textarea:disabled {
color: rgb(160, 160, 160); color: rgb(160, 160, 160);
} }
#properties-list input[type=checkbox] {
vertical-align: bottom;
}
#properties-list input[type=button] { #properties-list input[type=button] {
cursor: pointer; cursor: pointer;
background-color: rgb(51, 102, 102); background-color: rgb(51, 102, 102);
@ -210,8 +214,8 @@ input:disabled, textarea:disabled {
} }
#properties-list .property { #properties-list .property {
padding: 6pt 6pt; padding: 4pt;
border-top: 0.75pt solid rgb(63, 63, 63); border-bottom: 0.75pt solid rgb(63, 63, 63);
min-height: 1em; min-height: 1em;
} }
@ -225,10 +229,6 @@ table#properties-list {
table-layout: fixed; table-layout: fixed;
} }
#properties-list > div {
margin: 3pt 0;
}
#properties-list { #properties-list {
border-bottom: 0.75pt solid #e5e5e5; border-bottom: 0.75pt solid #e5e5e5;
} }

View file

@ -95,35 +95,36 @@ void GLBackend::renderBatch(Batch& batch) {
backend.render(batch); backend.render(batch);
} }
void GLBackend::checkGLError() { bool GLBackend::checkGLError(const char* name) {
GLenum error = glGetError(); GLenum error = glGetError();
if (!error) { if (!error) {
return; return false;
} }
else { else {
switch (error) { switch (error) {
case GL_INVALID_ENUM: case GL_INVALID_ENUM:
qCDebug(gpulogging) << "An unacceptable value is specified for an enumerated argument.The offending command is ignored and has no other side effect than to set the error flag."; qCDebug(gpulogging) << "GLBackend::" << name << ": An unacceptable value is specified for an enumerated argument.The offending command is ignored and has no other side effect than to set the error flag.";
break; break;
case GL_INVALID_VALUE: case GL_INVALID_VALUE:
qCDebug(gpulogging) << "A numeric argument is out of range.The offending command is ignored and has no other side effect than to set the error flag"; qCDebug(gpulogging) << "GLBackend" << name << ": A numeric argument is out of range.The offending command is ignored and has no other side effect than to set the error flag";
break; break;
case GL_INVALID_OPERATION: case GL_INVALID_OPERATION:
qCDebug(gpulogging) << "The specified operation is not allowed in the current state.The offending command is ignored and has no other side effect than to set the error flag.."; qCDebug(gpulogging) << "GLBackend" << name << ": The specified operation is not allowed in the current state.The offending command is ignored and has no other side effect than to set the error flag..";
break; break;
case GL_INVALID_FRAMEBUFFER_OPERATION: case GL_INVALID_FRAMEBUFFER_OPERATION:
qCDebug(gpulogging) << "The framebuffer object is not complete.The offending command is ignored and has no other side effect than to set the error flag."; qCDebug(gpulogging) << "GLBackend" << name << ": The framebuffer object is not complete.The offending command is ignored and has no other side effect than to set the error flag.";
break; break;
case GL_OUT_OF_MEMORY: case GL_OUT_OF_MEMORY:
qCDebug(gpulogging) << "There is not enough memory left to execute the command.The state of the GL is undefined, except for the state of the error flags, after this error is recorded."; qCDebug(gpulogging) << "GLBackend" << name << ": There is not enough memory left to execute the command.The state of the GL is undefined, except for the state of the error flags, after this error is recorded.";
break; break;
case GL_STACK_UNDERFLOW: case GL_STACK_UNDERFLOW:
qCDebug(gpulogging) << "An attempt has been made to perform an operation that would cause an internal stack to underflow."; qCDebug(gpulogging) << "GLBackend" << name << ": An attempt has been made to perform an operation that would cause an internal stack to underflow.";
break; break;
case GL_STACK_OVERFLOW: case GL_STACK_OVERFLOW:
qCDebug(gpulogging) << "An attempt has been made to perform an operation that would cause an internal stack to overflow."; qCDebug(gpulogging) << "GLBackend" << name << ": An attempt has been made to perform an operation that would cause an internal stack to overflow.";
break; break;
} }
return true;
} }
} }

View file

@ -31,7 +31,7 @@ public:
static void renderBatch(Batch& batch); static void renderBatch(Batch& batch);
static void checkGLError(); static bool checkGLError(const char* name = nullptr);
static bool makeProgram(Shader& shader, const Shader::BindingSet& bindings = Shader::BindingSet()); static bool makeProgram(Shader& shader, const Shader::BindingSet& bindings = Shader::BindingSet());

View file

@ -50,9 +50,9 @@ static const GLenum _elementTypeToGLType[NUM_TYPES]= {
}; };
#if _DEBUG #if _DEBUG
#define CHECK_GL_ERROR() ::gpu::GLBackend::checkGLError() #define CHECK_GL_ERROR() ::gpu::GLBackend::checkGLError(__FUNCTION__)
#else #else
#define CHECK_GL_ERROR() #define CHECK_GL_ERROR() false
#endif #endif
#endif #endif

View file

@ -597,9 +597,14 @@ void GLBackend::do_setStateDepthTest(State::DepthTest test) {
} else { } else {
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);
} }
CHECK_GL_ERROR(); if (CHECK_GL_ERROR()) {
qDebug() << "DepthTest" << (test.isEnabled() ? "Enabled" : "Disabled")
<< "Mask=" << (test.getWriteMask() ? "Write" : "no Write")
<< "Func=" << test.getFunction()
<< "Raw=" << test.getRaw();
}
_pipeline._stateCache.depthTest = test; _pipeline._stateCache.depthTest = test;
} }
} }
@ -711,7 +716,7 @@ void GLBackend::do_setStateBlend(State::BlendFunction function) {
} }
void GLBackend::do_setStateColorWriteMask(uint32 mask) { void GLBackend::do_setStateColorWriteMask(uint32 mask) {
if (_pipeline._stateCache.colorWriteMask = mask) { if (_pipeline._stateCache.colorWriteMask != mask) {
glColorMask(mask & State::ColorMask::WRITE_RED, glColorMask(mask & State::ColorMask::WRITE_RED,
mask & State::ColorMask::WRITE_GREEN, mask & State::ColorMask::WRITE_GREEN,
mask & State::ColorMask::WRITE_BLUE, mask & State::ColorMask::WRITE_BLUE,

View file

@ -127,10 +127,11 @@ public:
class DepthTest { class DepthTest {
uint8 _function = LESS; uint8 _function = LESS;
bool _writeMask = true; uint8 _writeMask = true;
bool _enabled = false; uint8 _enabled = false;
uint8 _spare;
public: public:
DepthTest(bool enabled, bool writeMask, ComparisonFunction func) : DepthTest(bool enabled = false, bool writeMask = true, ComparisonFunction func = LESS) :
_function(func), _writeMask(writeMask), _enabled(enabled) {} _function(func), _writeMask(writeMask), _enabled(enabled) {}
bool isEnabled() const { return _enabled; } bool isEnabled() const { return _enabled; }