Skip to content

Commit de88d8d

Browse files
committed
добавление в настройки гамма коррекции и экспозиции, фиксы багов
1 parent ae7fe12 commit de88d8d

File tree

18 files changed

+491
-81
lines changed

18 files changed

+491
-81
lines changed

build-native.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@
117117
name="jME3-SpaceShift-Editor"
118118
mainClass="com.ss.editor.Starter"
119119
toolkit="fx"
120-
version="0.6.0"
120+
version="0.6.1"
121121
/>
122122

123123
<mkdir dir="build/classes/META-INF"/>
@@ -130,7 +130,7 @@
130130
<manifest>
131131
<attribute name="Implementation-Vendor" value="spaceshift.ru"/>
132132
<attribute name="Implementation-Title" value="jME3 SpaceShift Editor"/>
133-
<attribute name="Implementation-Version" value="0.6.0"/>
133+
<attribute name="Implementation-Version" value="0.6.1"/>
134134
</manifest>
135135
</fx:jar>
136136

build/package/linux/control

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Package: jme3-spaceshift-editor
2-
Version: 0.6.0
2+
Version: 0.6.1
33
Section: tool
44
Maintainer: spaceshift.ru <[email protected]>
55
Priority: optional
84.7 KB
Binary file not shown.

resources/messages/messages.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ EditorBarComponent.settings.graphics=Graphics settings
6969
GraphicsDialogTitle=Graphics settings
7070
GraphicsDialogFXAA=Enable FXAA
7171
GraphicsDialogFullscreen=Fullscreen
72+
GraphicsDialogGammaCorrection=Gamma correction
73+
GraphicsDialogToneMapFilter=Exposure filter
74+
GraphicsDialogToneMapFilterWhitePoint=Exposure white point
7275
GraphicsDialogScreenSize=Screen size
7376
GraphicsDialogAnisotropy=Anisotropy
7477
GraphicsDialogButtonOk=Apply

resources/messages/messages_ru.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ EditorBarComponent.settings.graphics=Настройки графики
6969
GraphicsDialogTitle=Настройки графики
7070
GraphicsDialogFXAA=Включить FXAA
7171
GraphicsDialogFullscreen=Полноэкранный режим
72+
GraphicsDialogGammaCorrection=Коррекция гаммы
73+
GraphicsDialogToneMapFilter=Фильтр экспозиции
74+
GraphicsDialogToneMapFilterWhitePoint=Точка белого экспозиции
7275
GraphicsDialogScreenSize=Разрешение экрана
7376
GraphicsDialogAnisotropy=Анизатропная фильтрация
7477
GraphicsDialogButtonOk=Применить

src/com/ss/editor/Editor.java

Lines changed: 45 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
import com.jme3.environment.EnvironmentCamera;
1010
import com.jme3.environment.LightProbeFactory;
1111
import com.jme3.environment.generation.JobProgressAdapter;
12+
import com.jme3.input.InputManager;
1213
import com.jme3.light.LightProbe;
1314
import com.jme3.math.ColorRGBA;
1415
import com.jme3.math.Vector3f;
1516
import com.jme3.post.FilterPostProcessor;
1617
import com.jme3.post.filters.FXAAFilter;
18+
import com.jme3.post.filters.ToneMapFilter;
1719
import com.jme3.renderer.Camera;
1820
import com.jme3.scene.Node;
1921
import com.jme3.system.AppSettings;
@@ -96,6 +98,7 @@ public static void start(String[] args) throws IOException {
9698

9799
final EditorConfig config = EditorConfig.getInstance();
98100
final AppSettings settings = config.getSettings();
101+
settings.setGammaCorrection(false);
99102

100103
EDITOR.setSettings(settings);
101104
EDITOR.setShowSettings(false);
@@ -165,6 +168,16 @@ protected static void configureLogger() {
165168
*/
166169
private FilterPostProcessor postProcessor;
167170

171+
/**
172+
* FXAA фильтр.
173+
*/
174+
private FXAAFilter fxaaFilter;
175+
176+
/**
177+
* Фильтр коррекции экспозиции.
178+
*/
179+
private ToneMapFilter toneMapFilter;
180+
168181
private Editor() {
169182
this.lock = new StampedLock();
170183
}
@@ -257,19 +270,19 @@ public void simpleInitApp() {
257270
postProcessor = new FilterPostProcessor(assetManager);
258271
postProcessor.initialize(renderManager, viewPort);
259272

260-
if (editorConfig.isFXAA()) {
261-
262-
final FXAAFilter filter = new FXAAFilter();
263-
filter.setEnabled(true);
264-
filter.setSubPixelShift(1.0f / 4.0f);
265-
filter.setVxOffset(0.0f);
266-
filter.setSpanMax(8.0f);
267-
filter.setReduceMul(1.0f / 8.0f);
273+
fxaaFilter = new FXAAFilter();
274+
fxaaFilter.setEnabled(editorConfig.isFXAA());
275+
fxaaFilter.setSubPixelShift(1.0f / 4.0f);
276+
fxaaFilter.setVxOffset(0.0f);
277+
fxaaFilter.setSpanMax(8.0f);
278+
fxaaFilter.setReduceMul(1.0f / 8.0f);
268279

269-
postProcessor.addFilter(filter);
270-
}
280+
toneMapFilter = new ToneMapFilter();
281+
toneMapFilter.setWhitePoint(editorConfig.getToneMapFilterWhitePoint());
282+
toneMapFilter.setEnabled(editorConfig.isToneMapFilter());
271283

272-
// postProcessor.addFilter(new ToneMapFilter());
284+
postProcessor.addFilter(fxaaFilter);
285+
postProcessor.addFilter(toneMapFilter);
273286

274287
viewPort.addProcessor(postProcessor);
275288

@@ -284,7 +297,7 @@ public void simpleInitApp() {
284297
stateManager.attach(environmentCamera);
285298
}
286299

287-
fxContainer = JmeFxContainer.install(this, guiNode, true, cursorDisplayProvider);
300+
fxContainer = JmeFxContainer.install(this, guiNode, cursorDisplayProvider);
288301
scene = EditorFXSceneBuilder.build(fxContainer);
289302

290303
UIUtils.overrideTooltipBehavior(1000, 3000, 500);
@@ -316,8 +329,14 @@ public long trySyncLock() {
316329
@Override
317330
public void update() {
318331

332+
final ExecutorManager executorManager = ExecutorManager.getInstance();
333+
final InputManager inputManager = getInputManager();
319334
final JmeFxContainer fxContainer = getFxContainer();
320335

336+
if(fxContainer.isVisibleCursor() != inputManager.isCursorVisible()) {
337+
fxContainer.setVisibleCursor(inputManager.isCursorVisible());
338+
}
339+
321340
final long stamp = syncLock();
322341
try {
323342

@@ -407,4 +426,18 @@ public LightProbe getLightProbe() {
407426
public EnvironmentCamera getEnvironmentCamera() {
408427
return environmentCamera;
409428
}
429+
430+
/**
431+
* @return фильтр коррекции экспозиции.
432+
*/
433+
public ToneMapFilter getToneMapFilter() {
434+
return toneMapFilter;
435+
}
436+
437+
/**
438+
* @return FXAA фильтр.
439+
*/
440+
public FXAAFilter getFXAAFilter() {
441+
return fxaaFilter;
442+
}
410443
}

src/com/ss/editor/Messages.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ public class Messages {
8585
public static final String GRAPHICS_DIALOG_TITLE;
8686
public static final String GRAPHICS_DIALOG_FXAA;
8787
public static final String GRAPHICS_DIALOG_FULLSCREEN;
88+
public static final String GRAPHICS_DIALOG_GAMMA_CORRECTION;
89+
public static final String GRAPHICS_DIALOG_TONEMAP_FILTER;
90+
public static final String GRAPHICS_DIALOG_TONEMAP_FILTER_WHITE_POINT;
8891
public static final String GRAPHICS_DIALOG_SCREEN_SIZE;
8992
public static final String GRAPHICS_DIALOG_ANISOTROPY;
9093
public static final String GRAPHICS_DIALOG_BUTTON_OK;
@@ -172,6 +175,7 @@ public class Messages {
172175
public static final String BOUNDING_VOLUME_MODEL_PROPERTY_CONTROL_SPHERE_RADIUS;
173176
public static final String BOUNDING_VOLUME_MODEL_PROPERTY_CONTROL_BOX;
174177

178+
175179
static {
176180

177181
final Locale locale = Locale.getDefault();
@@ -256,6 +260,9 @@ public class Messages {
256260
GRAPHICS_DIALOG_TITLE = bundle.getString("GraphicsDialogTitle");
257261
GRAPHICS_DIALOG_FXAA = bundle.getString("GraphicsDialogFXAA");
258262
GRAPHICS_DIALOG_FULLSCREEN = bundle.getString("GraphicsDialogFullscreen");
263+
GRAPHICS_DIALOG_GAMMA_CORRECTION = bundle.getString("GraphicsDialogGammaCorrection");
264+
GRAPHICS_DIALOG_TONEMAP_FILTER = bundle.getString("GraphicsDialogToneMapFilter");
265+
GRAPHICS_DIALOG_TONEMAP_FILTER_WHITE_POINT = bundle.getString("GraphicsDialogToneMapFilterWhitePoint");
259266
GRAPHICS_DIALOG_SCREEN_SIZE = bundle.getString("GraphicsDialogScreenSize");
260267
GRAPHICS_DIALOG_ANISOTROPY = bundle.getString("GraphicsDialogAnisotropy");
261268
GRAPHICS_DIALOG_BUTTON_OK = bundle.getString("GraphicsDialogButtonOk");

src/com/ss/editor/config/Config.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public abstract class Config {
2020
public static final String CONFIG_RESOURCE_PATH = "/com/ss/editor/config/config.xml";
2121

2222
public static final String TITLE = "jME3 SpaceShift Editor";
23-
public static final String VERSION = "v.0.6.0";
23+
public static final String VERSION = "v.0.6.1";
2424

2525
public static final String SS_FOLDER_IN_USER_HOME = ".jme3-spaceshift-editor";
2626

src/com/ss/editor/config/EditorConfig.java

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.jme3.asset.AssetEventListener;
44
import com.jme3.asset.AssetKey;
55
import com.jme3.asset.TextureKey;
6+
import com.jme3.math.Vector3f;
67
import com.jme3.system.AppSettings;
78
import com.ss.editor.Editor;
89
import com.ss.editor.EditorContext;
@@ -39,6 +40,9 @@ public final class EditorConfig implements AssetEventListener {
3940
public static final String PREF_GRAPHIC_ANISOTROPY = GRAPHICS_ALIAS + "." + "anisotropy";
4041
public static final String PREF_GRAPHIC_FXAA = GRAPHICS_ALIAS + "." + "fxaa";
4142
public static final String PREF_GRAPHIC_FULLSCREEN = GRAPHICS_ALIAS + "." + "fullscreen";
43+
public static final String PREF_GRAPHIC_GAMA_CORRECTION = GRAPHICS_ALIAS + "." + "gammaCorrection";
44+
public static final String PREF_GRAPHIC_TONEMAP_FILTER = GRAPHICS_ALIAS + "." + "toneMapFilter";
45+
public static final String PREF_GRAPHIC_TONEMAP_FILTER_WHITE_POINT = GRAPHICS_ALIAS + "." + "toneMapFilterWhitePoint";
4246

4347
public static final String PREF_CURRENT_ASSET = ASSET_ALIAS + "." + "currentAsset";
4448
public static final String PREF_LAST_OPENED_ASSETS = ASSET_ALIAS + "." + "lastOpenedAssets";
@@ -68,6 +72,11 @@ public static EditorConfig getInstance() {
6872
*/
6973
private volatile ScreenSize screenSize;
7074

75+
/**
76+
* Точка белого на фильтре экспозиции.
77+
*/
78+
private volatile Vector3f toneMapFilterWhitePoint;
79+
7180
/**
7281
* Уровень анизатропной фильтрации.
7382
*/
@@ -83,6 +92,16 @@ public static EditorConfig getInstance() {
8392
*/
8493
private volatile boolean fullscreen;
8594

95+
/**
96+
* Включен ли режим гамма коррекции.
97+
*/
98+
private volatile boolean gammaCorrection;
99+
100+
/**
101+
* Включен ли фильтр экспозиции.
102+
*/
103+
private volatile boolean toneMapFilter;
104+
86105
/**
87106
* Текущий выбранный Asset.
88107
*/
@@ -200,6 +219,48 @@ public boolean isFullscreen() {
200219
return fullscreen;
201220
}
202221

222+
/**
223+
* @return включен ли режим гамма коррекции.
224+
*/
225+
public boolean isGammaCorrection() {
226+
return gammaCorrection;
227+
}
228+
229+
/**
230+
* @param gammaCorrection включен ли режим гамма коррекции.
231+
*/
232+
public void setGammaCorrection(final boolean gammaCorrection) {
233+
this.gammaCorrection = gammaCorrection;
234+
}
235+
236+
/**
237+
* @return включен ли фильтр экспозиции.
238+
*/
239+
public boolean isToneMapFilter() {
240+
return toneMapFilter;
241+
}
242+
243+
/**
244+
* @param toneMapFilter включен ли фильтр экспозиции.
245+
*/
246+
public void setToneMapFilter(final boolean toneMapFilter) {
247+
this.toneMapFilter = toneMapFilter;
248+
}
249+
250+
/**
251+
* @return точка белого на фильтре экспозиции.
252+
*/
253+
public Vector3f getToneMapFilterWhitePoint() {
254+
return toneMapFilterWhitePoint;
255+
}
256+
257+
/**
258+
* @param toneMapFilterWhitePoint точка белого на фильтре экспозиции.
259+
*/
260+
public void setToneMapFilterWhitePoint(final Vector3f toneMapFilterWhitePoint) {
261+
this.toneMapFilterWhitePoint = toneMapFilterWhitePoint;
262+
}
263+
203264
/**
204265
* @return настройки движка.
205266
*/
@@ -233,6 +294,8 @@ private void init() {
233294
this.anisotropy = prefs.getInt(PREF_GRAPHIC_ANISOTROPY, 0);
234295
this.fxaa = prefs.getBoolean(PREF_GRAPHIC_FXAA, false);
235296
this.fullscreen = prefs.getBoolean(PREF_GRAPHIC_FULLSCREEN, false);
297+
this.gammaCorrection = prefs.getBoolean(PREF_GRAPHIC_GAMA_CORRECTION, false);
298+
this.toneMapFilter = prefs.getBoolean(PREF_GRAPHIC_TONEMAP_FILTER, false);
236299

237300
final String currentAssetURI = prefs.get(PREF_CURRENT_ASSET, null);
238301

@@ -244,6 +307,23 @@ private void init() {
244307
}
245308
}
246309

310+
this.toneMapFilterWhitePoint = new Vector3f(11, 11, 11);
311+
312+
final String whitePoint = prefs.get(PREF_GRAPHIC_TONEMAP_FILTER_WHITE_POINT, null);
313+
final String[] coords = whitePoint == null? null : whitePoint.split(",", 3);
314+
315+
if (coords != null && coords.length > 2) {
316+
try {
317+
318+
toneMapFilterWhitePoint.setX(Float.parseFloat(coords[0]));
319+
toneMapFilterWhitePoint.setY(Float.parseFloat(coords[1]));
320+
toneMapFilterWhitePoint.setZ(Float.parseFloat(coords[2]));
321+
322+
} catch (NumberFormatException e) {
323+
LOGGER.error(e);
324+
}
325+
}
326+
247327
final List<String> deserializeLastOpened = EditorUtil.deserialize(prefs.getByteArray(PREF_LAST_OPENED_ASSETS, null));
248328

249329
if (deserializeLastOpened != null) {
@@ -262,6 +342,12 @@ public void save() {
262342
prefs.putInt(PREF_GRAPHIC_ANISOTROPY, getAnisotropy());
263343
prefs.putBoolean(PREF_GRAPHIC_FXAA, isFXAA());
264344
prefs.putBoolean(PREF_GRAPHIC_FULLSCREEN, isFullscreen());
345+
prefs.putBoolean(PREF_GRAPHIC_GAMA_CORRECTION, isGammaCorrection());
346+
prefs.putBoolean(PREF_GRAPHIC_TONEMAP_FILTER, isToneMapFilter());
347+
348+
final Vector3f whitePoint = getToneMapFilterWhitePoint();
349+
350+
prefs.put(PREF_GRAPHIC_TONEMAP_FILTER_WHITE_POINT, whitePoint.getX() + "," + whitePoint.getY() + "," + whitePoint.getZ());
265351

266352
if (currentAsset != null) {
267353
prefs.put(PREF_CURRENT_ASSET, currentAsset.toUri().toString());

src/com/ss/editor/manager/JavaFXImageManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@ private Path getCacheFolder() {
103103
*/
104104
public Image getTexturePreview(final Path file, final int width, final int height) {
105105

106+
if(!Files.exists(file)) {
107+
return Icons.IMAGE_512;
108+
}
109+
106110
final Path cacheFolder = getCacheFolder();
107111
final Path imageFolder = cacheFolder.resolve(String.valueOf(width)).resolve(String.valueOf(height));
108112
final Path cacheFile = imageFolder.resolve(file.subpath(1, file.getNameCount()));

0 commit comments

Comments
 (0)