Skip to content

Commit

Permalink
Fixed issue #1087.
Browse files Browse the repository at this point in the history
  • Loading branch information
nilsschmidt1337 committed Aug 25, 2024
1 parent 2311695 commit 9b4cfa0
Show file tree
Hide file tree
Showing 13 changed files with 118 additions and 53 deletions.
3 changes: 2 additions & 1 deletion src-windows/org/lwjgl/opengl/swt/PlatformWin32GLCanvas.java
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ public void resetStyle(Composite parent) {
public long create(GLCanvas canvas, GLData attribs, GLData effective) {
Canvas dummycanvas = new Canvas(canvas.getParent(), checkStyle(canvas.getParent(), canvas.getStyle()));
long context = 0L;
MemoryStack stack = MemoryStack.stackGet(); int ptr = stack.getPointer();
MemoryStack stack = MemoryStack.stackGet();
int ptr = stack.getPointer();
try {
context = create(canvas.handle, dummycanvas.handle, attribs, effective);
} catch (SWTException e) {
Expand Down
2 changes: 1 addition & 1 deletion src/org/nschmidt/ldparteditor/data/GData2.java
Original file line number Diff line number Diff line change
Expand Up @@ -912,7 +912,7 @@ int insertDistanceMeter(Vertex[] v, float[] lineData, int lineIndex) {

GL33Helper.pointAt7(0, v[0].x, v[0].y, v[0].z, lineData, lineIndex);
GL33Helper.pointAt7(1, v[1].x, v[1].y, v[1].z, lineData, lineIndex);
GL33Helper.colourise7(0, 2, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, lineData, lineIndex);
GL33Helper.colourise7(0, 2, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, lineData, lineIndex);

return 4;
}
Expand Down
6 changes: 3 additions & 3 deletions src/org/nschmidt/ldparteditor/data/GData3.java
Original file line number Diff line number Diff line change
Expand Up @@ -1600,7 +1600,7 @@ void drawProtractorGL20(boolean selected, Composite3D c3d, BigDecimal x1c, BigDe

GL11.glLineWidth(View.lineWidthGL);
if (selected) {
GL11.glColor4f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 1f);
GL11.glColor4f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 1f);
GL11.glBegin(GL11.GL_LINES);
GL11.glVertex3f(x1, y1, z1);
GL11.glVertex3f(x2, y2, z2);
Expand Down Expand Up @@ -1838,13 +1838,13 @@ int insertProtractor(Vertex[] v, float[] lineData, int lineIndex) {

GL33Helper.pointAt7(0, v[0].x, v[0].y, v[0].z, lineData, lineIndex);
GL33Helper.pointAt7(1, v[1].x, v[1].y, v[1].z, lineData, lineIndex);
GL33Helper.colourise7(0, 2, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, lineData, lineIndex);
GL33Helper.colourise7(0, 2, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, lineData, lineIndex);

lineIndex += 2;

GL33Helper.pointAt7(0, v[0].x, v[0].y, v[0].z, lineData, lineIndex);
GL33Helper.pointAt7(1, v[2].x, v[2].y, v[2].z, lineData, lineIndex);
GL33Helper.colourise7(0, 2, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, lineData, lineIndex);
GL33Helper.colourise7(0, 2, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, lineData, lineIndex);

lineIndex += 2;

Expand Down
26 changes: 18 additions & 8 deletions src/org/nschmidt/ldparteditor/data/GDataCSG.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ public final class GDataCSG extends GData {
final CSGType type;

static volatile Lock staticLock = new ReentrantLock();
static volatile Lock selectionLock = new ReentrantLock();

private static final ThreadsafeHashMap<DatFile, Map<String, CSG>> linkedCSG = new ThreadsafeHashMap<>();
private static final ThreadsafeHashMap<DatFile, HashBiMap<Integer, GDataCSG>> idToGDataCSG = new ThreadsafeHashMap<>();
Expand Down Expand Up @@ -1051,7 +1052,7 @@ private synchronized boolean isSelected(DatFile df) {
static synchronized void drawSelectionCSG(Composite3D c3d) {
final Set<GData3> selectedTriangles = selectedTrianglesMap.putIfAbsent(c3d.getLockableDatFileReference(), new HashSet<>());
if (!selectedTriangles.isEmpty()) {
GL11.glColor3f(Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB);
GL11.glColor3f(Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB);
GL11.glBegin(GL11.GL_LINES);
for (GData3 tri : selectedTriangles) {
GL11.glVertex3f(tri.x1, tri.y1, tri.z1);
Expand Down Expand Up @@ -1159,15 +1160,24 @@ public static synchronized Set<GDataCSG> getSelection(DatFile df) {

static synchronized void selectAll(DatFile df) {
clearSelection(df);
Set<GDataCSG> newSelection = new HashSet<>(registeredData.putIfAbsent(df, new HashSet<>()));
for (Iterator<GDataCSG> it = newSelection.iterator(); it.hasNext();) {
final GDataCSG g = it.next();
if (g != null && g.canSelect()) {
continue;
GDataCSG.staticLock.lock();
try {
Set<GDataCSG> newSelection = new HashSet<>(registeredData.putIfAbsent(df, new HashSet<>()));
for (Iterator<GDataCSG> it = newSelection.iterator(); it.hasNext();) {
final GDataCSG g = it.next();
if (g != null && g.canSelect()) {
continue;
}
it.remove();
}
it.remove();
selectedBodyMap.get(df).addAll(newSelection);
for (GDataCSG csg : newSelection) {
csg.drawAndParse(null, df, false);
}
GDataCSG.rebuildSelection(df);
} finally {
GDataCSG.staticLock.unlock();
}
selectedBodyMap.get(df).addAll(newSelection);
}

synchronized boolean canSelect() {
Expand Down
44 changes: 32 additions & 12 deletions src/org/nschmidt/ldparteditor/data/GL33ModelRenderer.java
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,17 @@ private void renderThread() {
// Skip render mode 5
if (renderMode != 5) try {
staticLock.lock();
final boolean bfcMode = renderMode == 2 || renderMode == 3 || renderMode == 6;

if (bfcMode) {
Colour.vertexSelectedTmpColourR = Colour.vertexSelectedBfcColourR;
Colour.vertexSelectedTmpColourG = Colour.vertexSelectedBfcColourG;
Colour.vertexSelectedTmpColourB = Colour.vertexSelectedBfcColourB;
} else {
Colour.vertexSelectedTmpColourR = Colour.vertexSelectedColourR;
Colour.vertexSelectedTmpColourG = Colour.vertexSelectedColourG;
Colour.vertexSelectedTmpColourB = Colour.vertexSelectedColourB;
}

// First we have to get links to the sets from the model
final DatFile df = c3d.getLockableDatFileReference();
Expand Down Expand Up @@ -544,7 +555,8 @@ private void renderThread() {
// CSG Selection
int csgSelectionVertexSize = 0;
final float[] tmpCsgSelectionData;
{
GDataCSG.selectionLock.lock();
try {
int csgSelectionIndex = 0;
Set<GData3> selection = GDataCSG.getSelectionData(df);
csgSelectionVertexSize += selection.size() * 6;
Expand All @@ -556,9 +568,11 @@ private void renderThread() {
pointAt7(3, gd3.x1, gd3.y1, gd3.z1, tmpCsgSelectionData, csgSelectionIndex);
pointAt7(4, gd3.x3, gd3.y3, gd3.z3, tmpCsgSelectionData, csgSelectionIndex);
pointAt7(5, gd3.x2, gd3.y2, gd3.z2, tmpCsgSelectionData, csgSelectionIndex);
colourise7(0, 6, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, tmpCsgSelectionData, csgSelectionIndex);
colourise7(0, 6, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, tmpCsgSelectionData, csgSelectionIndex);
csgSelectionIndex += 6;
}
} finally {
GDataCSG.selectionLock.unlock();
}

if (calculateCSG.compareAndSet(true, false)) {
Expand Down Expand Up @@ -593,7 +607,13 @@ private void renderThread() {
csgSolidVertexCount += size[1];
csgTransVertexCount += size[2];
}
GDataCSG.rebuildSelection(df);
GDataCSG.selectionLock.lock();
try {
GDataCSG.rebuildSelection(df);
} finally {
GDataCSG.selectionLock.unlock();
}

int csgIndex = 0;
int transparentCSGindex = csgSolidVertexCount;
float[] tmpCsgData = new float[csgDataSize];
Expand Down Expand Up @@ -1081,9 +1101,9 @@ private void renderThread() {
final float r = Colour.vertexColourR;
final float g = Colour.vertexColourG;
final float b = Colour.vertexColourB;
final float r2 = Colour.vertexSelectedColourR;
final float g2 = Colour.vertexSelectedColourG;
final float b2 = Colour.vertexSelectedColourB;
final float r2 = Colour.vertexSelectedTmpColourR;
final float g2 = Colour.vertexSelectedTmpColourG;
final float b2 = Colour.vertexSelectedTmpColourB;
int i = 0;

if (smoothVertices) {
Expand Down Expand Up @@ -1183,7 +1203,7 @@ private void renderThread() {
Vertex v2 = verts.get(i);
pointAt7(0, v1.x, v1.y, v1.z, selectionLineData, selectionLineIndex);
pointAt7(1, v2.x, v2.y, v2.z, selectionLineData, selectionLineIndex);
colourise7(0, 2, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, selectionLineData, selectionLineIndex);
colourise7(0, 2, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, selectionLineData, selectionLineIndex);
selectionLineIndex += 2;
}
}
Expand Down Expand Up @@ -1243,7 +1263,7 @@ private void renderThread() {
case 2:
pointAt7(0, v[0].x, v[0].y, v[0].z, selectionLineData, selectionLineIndex);
pointAt7(1, v[1].x, v[1].y, v[1].z, selectionLineData, selectionLineIndex);
colourise7(0, 2, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, selectionLineData, selectionLineIndex);
colourise7(0, 2, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, selectionLineData, selectionLineIndex);
selectionLineIndex += 2;
break;
case 3:
Expand All @@ -1254,9 +1274,9 @@ private void renderThread() {
pointAt7(4, v[2].x, v[2].y, v[2].z, selectionLineData, selectionLineIndex);
pointAt7(5, v[0].x, v[0].y, v[0].z, selectionLineData, selectionLineIndex);
if (((GData3) gd).isTriangle) {
colourise7(0, 6, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, selectionLineData, selectionLineIndex);
colourise7(0, 6, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, selectionLineData, selectionLineIndex);
} else {
colourise7(0, 4, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, selectionLineData, selectionLineIndex);
colourise7(0, 4, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, selectionLineData, selectionLineIndex);
}
selectionLineIndex += 6;
break;
Expand All @@ -1269,7 +1289,7 @@ private void renderThread() {
pointAt7(5, v[3].x, v[3].y, v[3].z, selectionLineData, selectionLineIndex);
pointAt7(6, v[3].x, v[3].y, v[3].z, selectionLineData, selectionLineIndex);
pointAt7(7, v[0].x, v[0].y, v[0].z, selectionLineData, selectionLineIndex);
colourise7(0, 8, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, selectionLineData, selectionLineIndex);
colourise7(0, 8, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, selectionLineData, selectionLineIndex);
selectionLineIndex += 8;
break;
case 5:
Expand All @@ -1279,7 +1299,7 @@ private void renderThread() {
pointAt7(3, v[2].x, v[2].y, v[2].z, selectionLineData, selectionLineIndex);
pointAt7(4, v[0].x, v[0].y, v[0].z, selectionLineData, selectionLineIndex);
pointAt7(5, v[3].x, v[3].y, v[3].z, selectionLineData, selectionLineIndex);
colourise7(0, 2, Colour.vertexSelectedColourR, Colour.vertexSelectedColourG, Colour.vertexSelectedColourB, 7f, selectionLineData, selectionLineIndex);
colourise7(0, 2, Colour.vertexSelectedTmpColourR, Colour.vertexSelectedTmpColourG, Colour.vertexSelectedTmpColourB, 7f, selectionLineData, selectionLineIndex);
colourise7(2, 2, Colour.condlineSelectedColourR, Colour.condlineSelectedColourG, Colour.condlineSelectedColourB, 7f, selectionLineData, selectionLineIndex);
colourise7(4, 2, Colour.condlineSelectedColourR / 2f, Colour.condlineSelectedColourG / 2f, Colour.condlineSelectedColourB / 2f, 7f, selectionLineData, selectionLineIndex);
selectionLineIndex += 6;
Expand Down
Loading

0 comments on commit 9b4cfa0

Please sign in to comment.