Age | Commit message (Collapse) | Author |
|
|
|
|
|
The LLManifest.copy_action() method ensures that the destination directory for
any file copy exists before trying to copy the file, specifically so we don't
have to clutter the business logic with tests and explicit directory creation.
Remove redundant os.makedirs() stanzas.
|
|
|
|
|
|
Introduce helper classes to manage paired initProfile() / finishProfile()
calls and gBenchmarkProgram.bind() / unbind() calls.
Make TextureHolder a class instead of a struct.
Per Henri Beauchamp, since gpu_benchmark() takes a very early exit if
(!gGLManager.mHasTimerQuery), subsequent tests of mHasTimerQuery are
redundant. Remove.
One of those tests controls the busted_finish bool, which can never become
true. Remove that and all tests on it.
|
|
A classic-C array doesn't destroy its individual elements, but a std::vector
does. Use a std::vector<LLRenderTarget> for dest, so each LLRenderTarget will
be destroyed. ~LLRenderTarget() calls its release() method.
|
|
Ruslan tracked the observed crash to assignments (to create a dummy triangle)
through an LLStrider<LLVector3> obtained from getVertexStrider(). When
getVertexStrider() returns false, produce a warning and just skip the rest of
the benchmark test.
The one bit of explicit cleanup apparently required by that early exit is a
call to LLImageGL::deleteTextures() to match the preceding generateTextures()
call. Wrap both in a new TextureHolder class whose destructor takes care of
cleanup. The only other references to the corresponding U32 array are a couple
calls to LLTexUnit::bindManual(); add a bind() method to support that.
Also fix apparent bug in the LL_DARWIN special case for "improbably high and
likely incorrect": the code assigned -1.f (the "couldn't compute" value) to
gbps, overlooking the fact that gbps is unconditionally recomputed below. In
the "likely incorrect" stanza, simply return -1.f instead.
|
|
In case of buff->getVertexStrider(v) return false it mean that glMapBufferRange() return NULL
The next three lines can be the reason of this crash.
|
|
|
|
|
|
|
|
|
|
The /marker switch is passed by the (new) VMP. If any user wants to explicitly
pass the /marker switch to the installer, s/he shouldn't mind ending up with
an nsis.winstall file in the download directory.
|
|
LLTextureFetchWorker::doWork()
The trouble lines are:
U8 * buffer = (U8 *) ALLOCATE_MEM(LLImageBase::getPrivatePool(), total_size);
if (cur_size > 0)
{
memcpy(buffer, mFormattedImage->getData(), cur_size);
}
If 'cur_size > mHttpReplyOffset + append_size' then 'total_size -= src_offset' will cause
total_size to be smaller than cur_size causing a write access violation on the memcpy.
Since the response is invalid it seemed best to make it follow the other failed partial condition.
(transplanted from 737e28ec6b4d74f3ff915a4effc13d7b615a6a9b)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Now that LLManifest.prefix() supports use as a context manager:
with self.prefix(...):
...
convert existing calls to that form.
This was an interesting exercise because it surfaced at least two places where
the indentation did not match the self.prefix() nesting, plus another place
where existing code was undented without a self.end_prefix() call. (That last
was an uncaught logic bug.) This underscores the value of using a SINGLE
consistent, idiomatic mechanism to limit the scope of each self.prefix() call.
|
|
|
|
|
|
To support that, enhance path_optional() to accept wildcards and return the
expanded filenames.
|
|
|
|
|
|
|
|
* do not redirect stderr to stdout
* catch errors generated in platform specific code and display them more nicely
* run_command no longer captures output (only used in one place;
replaced that with direct use of subprocess)
|
|
You can't legitimately perform an ordered comparison between a pointer and an
int, even 0. Fix a number of 'if (ptr > 0)' to plain 'if (ptr)'.
Fix LLEditWearableDictionary::WearableEntry constructor to avoid varargs
mechanism. It used to accept three different counts, followed by three
different lists of enums, fetched in each case as 'int' -- dubious in itself.
The constructor body performed three different loops to populate those enums
into three different member vectors.
Instead, make the constructor accept three vectors and initialize the member
vectors from the passed vectors. Now that C++ has inline vector
initialization, change existing constructor calls to pass temporary vectors
initialized with what used to be the varargs enum values.
|
|
|
|
|
|
|
|
|
|
viewer
FIXED
|
|
|
|
|
|
|
|
|
|
|
|
|
|
quitting viewer
|
|
|
|
location in Edit mode
|
|
Approved-by: Simon Linden <simon@lindenlab.com>
Approved-by: Andrey Lihatskiy <andreylproductengine@lindenlab.com>
Approved-by: Andrey Kleshchev <andreykproductengine@lindenlab.com>
|
|
to file AR
|
|
|
|
|
|
relogging
|