Home | History | Annotate | Download | only in geomipmap
      1 /*
      2  * Copyright (c) 2009-2010 jMonkeyEngine
      3  * All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions are
      7  * met:
      8  *
      9  * * Redistributions of source code must retain the above copyright
     10  *   notice, this list of conditions and the following disclaimer.
     11  *
     12  * * Redistributions in binary form must reproduce the above copyright
     13  *   notice, this list of conditions and the following disclaimer in the
     14  *   documentation and/or other materials provided with the distribution.
     15  *
     16  * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
     17  *   may be used to endorse or promote products derived from this software
     18  *   without specific prior written permission.
     19  *
     20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31  */
     32 
     33 package com.jme3.terrain.geomipmap;
     34 
     35 import com.jme3.scene.VertexBuffer.Type;
     36 import java.nio.IntBuffer;
     37 
     38 /**
     39  * Stores a terrain patch's details so the LOD background thread can update
     40  * the actual terrain patch back on the ogl thread.
     41  *
     42  * @author Brent Owens
     43  *
     44  */
     45 public class UpdatedTerrainPatch {
     46 
     47 	private TerrainPatch updatedPatch;
     48 	private int newLod;
     49 	private int previousLod;
     50 	private int rightLod,topLod,leftLod,bottomLod;
     51 	private IntBuffer newIndexBuffer;
     52 	private boolean reIndexNeeded = false;
     53 	private boolean fixEdges = false;
     54 
     55 	public UpdatedTerrainPatch(TerrainPatch updatedPatch, int newLod) {
     56 		this.updatedPatch = updatedPatch;
     57 		this.newLod = newLod;
     58 	}
     59 
     60 	public UpdatedTerrainPatch(TerrainPatch updatedPatch, int newLod, int prevLOD, boolean reIndexNeeded) {
     61 		this.updatedPatch = updatedPatch;
     62 		this.newLod = newLod;
     63 		this.previousLod = prevLOD;
     64 		this.reIndexNeeded = reIndexNeeded;
     65 		if (this.newLod <= 0)
     66                     throw new IllegalArgumentException();
     67 	}
     68 
     69 	public String getName() {
     70 		return updatedPatch.getName();
     71 	}
     72 
     73 	protected boolean lodChanged() {
     74 		if (reIndexNeeded && previousLod != newLod)
     75 			return true;
     76 		else
     77 			return false;
     78 	}
     79 
     80 	protected TerrainPatch getUpdatedPatch() {
     81 		return updatedPatch;
     82 	}
     83 
     84 	protected void setUpdatedPatch(TerrainPatch updatedPatch) {
     85 		this.updatedPatch = updatedPatch;
     86 	}
     87 
     88 	protected int getNewLod() {
     89 		return newLod;
     90 	}
     91 
     92 	public void setNewLod(int newLod) {
     93 		this.newLod = newLod;
     94                 if (this.newLod < 0)
     95                     throw new IllegalArgumentException();
     96 	}
     97 
     98 	protected IntBuffer getNewIndexBuffer() {
     99 		return newIndexBuffer;
    100 	}
    101 
    102 	protected void setNewIndexBuffer(IntBuffer newIndexBuffer) {
    103 		this.newIndexBuffer = newIndexBuffer;
    104 	}
    105 
    106 
    107 	protected int getRightLod() {
    108 		return rightLod;
    109 	}
    110 
    111 
    112 	protected void setRightLod(int rightLod) {
    113 		this.rightLod = rightLod;
    114 	}
    115 
    116 
    117 	protected int getTopLod() {
    118 		return topLod;
    119 	}
    120 
    121 
    122 	protected void setTopLod(int topLod) {
    123 		this.topLod = topLod;
    124 	}
    125 
    126 
    127 	protected int getLeftLod() {
    128 		return leftLod;
    129 	}
    130 
    131 
    132 	protected void setLeftLod(int leftLod) {
    133 		this.leftLod = leftLod;
    134 	}
    135 
    136 
    137 	protected int getBottomLod() {
    138 		return bottomLod;
    139 	}
    140 
    141 
    142 	protected void setBottomLod(int bottomLod) {
    143 		this.bottomLod = bottomLod;
    144 	}
    145 
    146 	public boolean isReIndexNeeded() {
    147 		return reIndexNeeded;
    148 	}
    149 
    150 	public void setReIndexNeeded(boolean reIndexNeeded) {
    151 		this.reIndexNeeded = reIndexNeeded;
    152 	}
    153 
    154 	public boolean isFixEdges() {
    155 		return fixEdges;
    156 	}
    157 
    158 	public void setFixEdges(boolean fixEdges) {
    159 		this.fixEdges = fixEdges;
    160 	}
    161 
    162 	public int getPreviousLod() {
    163 		return previousLod;
    164 	}
    165 
    166 	public void setPreviousLod(int previousLod) {
    167 		this.previousLod = previousLod;
    168 	}
    169 
    170 	public void updateAll() {
    171 		updatedPatch.setLod(newLod);
    172 		updatedPatch.setLodRight(rightLod);
    173 		updatedPatch.setLodTop(topLod);
    174 		updatedPatch.setLodLeft(leftLod);
    175 		updatedPatch.setLodBottom(bottomLod);
    176 		if (newIndexBuffer != null && (reIndexNeeded || fixEdges)) {
    177 			updatedPatch.setPreviousLod(previousLod);
    178 			updatedPatch.getMesh().clearBuffer(Type.Index);
    179 			updatedPatch.getMesh().setBuffer(Type.Index, 3, newIndexBuffer);
    180 		}
    181 	}
    182 
    183 }
    184